Есть много способов сделать то, что вы ищете, только пара примеров.
awk
и индивидуальное решение
Одним из решений, адаптированным для вашего примера, является использование awk
и передача ему 3 переменных. Это не является общим, потому что если у вас будет 4 строки, вы должны передать 4 переменные и так далее ...
У команды awk
есть простой способ управлять столбцами по их количеству ($1
, $2
...$NF
последний).
Просто чтобы было проще читать здесь я использую ваш старый промежуточный файл a21s.txt
awk -v s1="ALPHA" -v s2="BETA" -v s3="GAMMA" '
NR==1 {print s1,$7} ;
NR==2 {print s2,$7} ;
NR==3 {print s3,$7} ; ' a21s.txt
- В первой строке вы передаете 3 переменные в
awk
с опцией -v
.
- В следующих строках вы используете, что внутренняя переменная NR, ведет подсчет номера строки. Итак, вы идете печатать переменную s1, только когда у вас есть первая строка, s2 со второй ... и так далее.
- В последней строке после
'
вы можете указать имя файла, чтобы вам не нужно было вызывать процесс cat
и передавать его на awk
.
- Если переменная (ALPHA, BETA ...) генерируется с помощью некоторого механизма (например, «Serial01, Serial02»), вы можете поместить ее вместо элементов управления номером строки и внешней переменной.
Практическое примечание: в * nix вы можете последовательно передавать команды (|
) один вывод в следующий без необходимости создавать промежуточные файлы.
Итак, в вашем примере вы можете использовать напрямую:
cat "*Pre*.msg" | strings2 | grep "D24" | cut -d" " -f7 > Air21Serials.txt
В этом случае вместо cut
вы можете использовать команду awk
, cat "*Pre*.msg" | strings2 | grep "D24" | awk '...' > final_file.txt
.
Более общее решение: paste
+ awk
Допустим, у вас есть файл a21s.txt
и еще один (b.txt
) с тем же числом строк и внутри строк (по одному слову в каждой), которые вы хотите добавить в префикс (как показано ниже).
ALPHA
BETA
GAMMA
Вы можете просто использовать
paste b.txt a21.txt | awk '{print $1,$8}' > Air21Serials.txt
Обратите внимание, что теперь столбец вашего сериала является восьмым, потому что вы добавили еще один с помощью команды paste.
Заметка
обратитесь к самому Linux за дополнительной информацией с man awk
и man paste
:-)