Использование короткой конструкции while
:
% i=1; while IFS= read -r line; do printf '%s. %s\n' "$i" "$line"; ((i++)); done <file.txt
1. This is the first line
2. This is the second line
3. This is the third line
4.
5. This was a blank line
Расширенное:
#!/usr/bin/env bash
i=1
while IFS= read -r line; do
printf '%s. %s\n' "$i" "$line"
((i++))
done <file.txt
Одной командой pr
:
pr -Tm file[12]
-T
(--omit-pagination
)-опустить заголовки и трейлеры страниц, исключить любое разбиение на страницы с помощью каналов ввода, установленных во входных файлах
-m
(--merge
)-печатать все файлы параллельно, по одному в каждом столбце
Попробуйте:
paste -d '\n' file1 file2 | xargs -d '\n' printf '%-30s %-30s\n'
На основе решения @Kusalananda .
Примечание. :Параметр -d
параметра xargs
доступен только в версии GNU, но не в BSD.
Портативное решение:
$ paste file1 file2 | awk -F'\t' '{ printf("%-30s %s\n", $1, $2) }'
looooooooong line hello
line world
Это использует paste
для создания ввода с разделителями табуляции -для awk
.
Сценарий awk
просто берет два поля, разделенных табуляцией -, и выводит их, используя printf()
. Столбец из 30 символов зарезервирован для первого файла. %-30s
означает «30 позиций строковых данных с выравниванием по левому краю». Удаление -
приведет к выравниванию столбца по правому краю, а изменение 30
изменит ширину столбца.
Это также относится к файлам разной длины. Здесь я добавил строки во второй файл:
looooooooong line hello
line world
hello
world
hello
world
И, при изменении порядка файлов в командной строке:
hello looooooooong line
world line
hello
world
hello
world
А как насчет paste file{1,2}| column -s $'\t' -tn
?
looooooooong line line hello
line world
Это говорит column
использовать Tab
в качестве разделителя столбцов, где мы берем его из команды paste
, которая является там разделителем по умолчанию, если не указано; вообще:
paste -d'X' file{1,2}| column -s $'X' -tn
где X
означает любой одиночный символ. Вам нужно выбрать тот, который не будет встречаться в ваших файлах.
Опция -t
используется для определения количества столбцов, содержащихся во входных данных.
это будет работать, даже если в файле1 была пустая строка (s ), и второй файл не будет напечатан в области печати файла1 , см. ниже ввод/вывод
Входной файл1:
looooooooong line
line
Входной файл2:
hello
world
Выход:
looooooooong line hello
world
line