Попробуйте join
команду:
join file1 file2
ATM 1434.972183
BMS1 4907.841667
BMS1 4907.841667
BMS1 880.4532628
BMS1 880.4532628
Проблема действительно в порядке оценки.
Это просто помещает текст в командную строку. :Слишком поздно, чтобы оболочка реализовала перенаправление.
paul $ j=" > foo.txt "
paul $ echo Words Here $j
Words Here > foo.txt
paul $ ls -l foo.txt
ls: cannot access 'foo.txt': No such file or directory
Это заставляет оболочку повторно -оценить всю команду.
paul $ eval echo Words Here $j
paul $ ls -l foo.txt
-rw-r--r-- 1 paul paul 11 Aug 19 22:38 foo.txt
paul $ cat foo.txt
Words Here
paul $
Встроенный eval -может быть трудно использовать правильно, и я избегаю его использования везде, где это возможно. Ваша команда оценивается дважды (один раз как аргументы для eval, а затем сама eval ), что может сделать ваше цитирование трудным и утомительным (, особенно там, где задействован awk, где уже необходимы одинарные и двойные кавычки. )Кроме того, ошибки могут привести к тому, что ваши переменные будут выполняться как команды с непредвиденными последствиями. Подробнее здесь:
unix.stackexchange.com/questions/278427/why -и -, когда -следует -eval -использовать -следует -избегать -в оболочке --скрипты
Добавлен пример:
Одно предложение из ссылки на StackExchange, которую я разместил, состоит в том, чтобы оболочка создавала новый файловый дескриптор и сначала направляла его к цели.
Это несколько преувеличенный тестовый сценарий.
#! /bin/bash
#.. First arg to script is -l for test runs.
#.. For your live action.
Grafana="/dev/tcp/192.168.1.242/5062"
#.. For my demo here.
Grafana="./foo.txt"
rm -f foo.txt
if [[ "${1}" = "-l" ]]; then
exec 7>&1
shift 1
else
exec 7>"${Grafana}"
fi
vars="${@}" #.. Rest of args to output.
awk -v vars="$vars" 'BEGIN{printf "output.api %s \n", vars;}' 1>&7
ls -l foo.txt && cat foo.txt
И тест с записью в терминал, а потом в именованный файл/устройство.
Paul--)./Swit -l Easy Living
output.api Easy Living
ls: cannot access 'foo.txt': No such file or directory
Paul--)./Swit Easy Living
-rw-r--r-- 1 paul paul 24 Aug 20 09:22 foo.txt
output.api Easy Living
Paul--)
Вы можете оставить fd 7 открытым и использовать его несколько раз в скрипте. Вы можете закрыть его с помощьюexec 7>&-