Кажется, это работает:
awk 'NR==FNR { code[$2]=$1 } NR!=FNR {print; for( i=0; i<=NF; i++) { printf( "%s ", code[$i] ) }; printf "\n" }' input2 input1
Блок NR==FNR
работает только с первым файлом, указанным (, в котором общее количество обработанных записей равно общему количеству на данный момент ), и заполняет массив, используемый для вывода позже.
Блок NR!=FNR
работает только с последующим файлом и сначала выводит заданную строку ввода, а затем проходит через нее и использует каждое значение в качестве нижнего индекса поиска в массиве, чтобы определить, следует ли выводить v
или c
.
После этого повторяющегося ряда выводится новая строка.
Если вы можете изменить сценарий, вы можете заставить его автоматически добавлять вывод в другой файл.
Просто добавьте {
в отдельной строке перед вторым echo
, а затем } >>arch.make
после последнегоecho
:
#echo "Please add..."
{
echo ""
echo "INCFLAGS..."
# etc.
echo "FPPFLAGS..."
echo ""
} >>arch.make
Запуск, который будет добавлять результат команды echo
в {... }
в конец файла arch.make
каждый раз, когда вы запускаете скрипт.
Неоднозначное копирование звука. В этом случае кажется, что вы хотите получить вывод из скрипта и другой команды и добавить в файл (, а не копировать содержимое файла в другой, верно? ). Что вам нужно, так это перенаправить вывод в файл. Основной синтаксис:
command --options arguments >> file.txt
но если у вас есть несколько команд для запуска, вы можете создать групповую команду (тип составной команды; см. man bash). При этом вы получите что-то вроде
{ command1 --options1 arguments1 ; command2 --options2 arguments2,... } >> file.txt
Вы можете использовать()вместо {} для охвата списка команд (что создает подоболочку (если это не имеет для вас смысла, читайте о envoirament im man bash).
Наконец, если вы хотите, чтобы вывод выводился как на экран (или в другое место ), так и в файл, используйте программу tee .
Надеюсь, я помог вам.
**PS :**упомянутая выше команда, конечно, может быть скриптом.