Вероятно, проще использовать комбинацию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
между ними Вам не нужен флаг -
(выравнивание по левому краю -), по умолчанию выравнивание по правому краю -выравнивание:
awk '{printf "%5s %s\n",$1,$2}' a.txt
Вы можете использовать модификатор длины строки printf
для форматирования строки по правому краю. len
— длина интервала, предшествующего первому полю.
awk '{len=5-length($1); printf "%-*.*s %s %s\n", len,len," ",$1,$2}' a.txt