
У меня есть файл file1, содержимое которого выглядит следующим образом:
6 столбцов получены из 6 разных хостов перед их представлением с помощью команды "-exec cp". Это просто для информации.
Теперь у меня есть список из 6 имен хостов (file2), которые я хочу добавить в качестве первой строки в file1.
Содержимое файла file2 приведено ниже.
HOST1
HOST2
HOST3
HOST4
HOST5
HOST6
Мне нужен такой конечный результат.
Я могу добавить столбец, но не строку.
решение1
Вот один из способов:
awk -vhead="$(tr '\n' ' ' <file2)" 'BEGIN{print head}{print}' file1 > newfile
Команда tr
заменяет символы новой строки пробелами, преобразуя "столбец" в file2
"строку". Это передается awk
как head
переменная, которая печатается перед всем остальным. Затем каждая строка входного файла просто печатается.
В качестве альтернативы вы можете сделать все это за awk
:
awk 'NR==FNR{printf "%s ",$0; next}FNR==1{print ""}1;' file2 file1 > newfile
NR
— это номер текущей входной строки и FNR
номер строки текущего файла. Они будут равны только во время чтения первого файла. The printf "%s ",$0; next
напечатает текущую строку без a \n
в конце и перейдет к следующей. The FNR==1{print ""}
просто добавляет a \n
после того, как заголовок был напечатан, а The 1;
— это awk
сокращение для «напечатать эту строку».
решение2
( echo $(cat file2) ; cat file1 ) | column -t > file3