Есть много способов сделать то, что вы ищете, только пара примеров.
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 :-)