Отформатируйте столбцы в выводе с помощью awk

Вероятно, проще использовать комбинациюpaste+cut

$ paste -d'\0' <(cut -c1-4 File1.txt) File2.txt <(cut -c9- File1.txt)
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
  • -d'\0'так, чтобы вводы объединялись без каких-либо символов между
  • <()— это замена процесса
  • cut -c1-4дает первые четыре символа из каждой строки
  • cut -c9-дает все символы из каждой строки, начиная с 9-й позиции


Другой способ — идиоматическая обработка двух файлов с использованиемawk

$ awk 'NR==FNR{a[FNR]=$0; next} {print substr($0,1,4) a[FNR] substr($0,9)}' File2.txt File1.txt
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
  • NR==FNR{a[FNR]=$0; next}сохраняет все строки из File2.txtв массиве aс номером строки в качестве ключа
  • print substr($0,1,4) a[FNR] substr($0,9)используйте substrдля извлечения необходимых символов и вставьте строки из File2.txtмежду ними

2
23.09.2019, 19:46
2 ответа

Вам не нужен флаг -(выравнивание по левому краю -), по умолчанию выравнивание по правому краю -выравнивание:

awk '{printf "%5s %s\n",$1,$2}' a.txt
6
27.01.2020, 21:51

Вы можете использовать модификатор длины строки printfдля форматирования строки по правому краю. len— длина интервала, предшествующего первому полю.

awk '{len=5-length($1); printf "%-*.*s %s %s\n", len,len," ",$1,$2}' a.txt
3
27.01.2020, 21:51

Теги

Похожие вопросы