Печать двух файлов в две колонки

Использование короткой конструкции 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
4
16.09.2017, 22:50
4 ответа

Одной командой pr:

pr -Tm file[12]
  • -T(--omit-pagination)-опустить заголовки и трейлеры страниц, исключить любое разбиение на страницы с помощью каналов ввода, установленных во входных файлах

  • -m(--merge)-печатать все файлы параллельно, по одному в каждом столбце

10
27.01.2020, 20:45

Попробуйте:

paste -d '\n' file1 file2 | xargs -d '\n' printf '%-30s  %-30s\n'

На основе решения @Kusalananda .

Примечание. :Параметр -dпараметра xargsдоступен только в версии GNU, но не в BSD.

1
27.01.2020, 20:45

Портативное решение:

$ 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
1
27.01.2020, 20:45

А как насчет 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
    
8
27.01.2020, 20:45

Теги

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