Как выровнять несколько выводов команды по столбцам

Вы всегда можете сделать (поскольку вы уже используете GNU sed ( -i )):

sed -i -f - FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF

-f - указывает sed читать сценарий sed из стандартного ввода-вывода.

Если вы хотите повторно использовать один и тот же сценарий для нескольких файлов в Linux (и только в Linux), с оболочкой типа bash , zsh , ksh который реализует здесь документы с временными файлами (в отличие от каналов типа dash или yash ) и все еще с GNU sed , вы можете сделать:

find . -name '*.conf' -exec sed -i -f /dev/stdin {} + << EOF
s/BASE_64/$BASE_64/g
EOF

В Linux (и только для Linux), / dev / stdin не означает stdin так же, как - .Вместо этого это символическая ссылка на файл, открытый на стандартном вводе, поэтому каждый раз, когда sed открывает его, он открывает файл заново с самого начала. Вышеупомянутая команда будет работать нормально в других системах (которые имеют / dev / stdin ) или с оболочками, реализующими здесь-документы с каналами, но только если имеется достаточно мало файлов conf , которые sed вызывается только один раз. При повторном вызове в системах, отличных от Linux, например, -f - , / dev / stdin будет отображаться пустым, поскольку он уже был прочитан при первом вызове.

busybox sed также поддерживает -i так же, как GNU sed , но не поддерживает -f - . Так что вы в любом случае захотите использовать там -f / dev / stdin . В FreeBSD sed используйте:

sed -i '' -f /dev/stdin FILE_NAME << EOF
s/BASE_64/$BASE_64/g
EOF
1
27.07.2017, 14:06
2 ответа

Ключевым моментом здесь является использование программы колонки, см. человек 1 столбец

Это позволит вам выравнивать данные по мере необходимости с помощью нескольких простых опций, таких как определение разделителя

Вы также можете взглянуть на этот вопрос :Форматирование списков с помощью команды столбца в *nix

1
27.01.2020, 23:18

Вы можете сделать это, как показано:

grepFile | column -t -s $'\t' -o $'\t'

При условии, что функция grepFile была изменена в соответствии с моими предложениями, как указано.

Создайте еще одну определяемую пользователем -функцию, скажем, "alignCols" и передайте ей вывод вашей функции "grepFile".

Кроме того, немного измените функцию "grepFile" в операторе printf:

function grepFile
{

    #*************** ADD THIS ********
    t=$'\t'; # TAB char
    #*********************************

    printf "ISA\t\tGS\tTrans\tSender ID\tReceiver ID\tINV PO Number\tASN PO Number\n"

    #*************** MODIFY THIS ********
    fmt="%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
    #*********************************

    while read -r LINE
    do
     #... keep the other statements just like before #

     # ************** MODIFY printf ****************
     printf "$fmt" \
        "${isa:-$t}"         \
        "${gs:-$t}"          \
        "${trans:-$t}"       \
        "${sender:-$t}"      \
        "${receiver:-$t}"    \
        "${bigponumber:-$t}" \
        "${asnponumber:-$t}";
     # *********************************************

    done < /path/to/Files.txt
    rm /path/to/Files.txt
}

function alignCols
{
sed -e '
1i\
.TS\
tab('$'\t'');\
l l l l l l l.
$a\
.TE
' - | tbl - | nroff -Tascii -ms | grep.
}

# And then...

grepFile | alignCols

Результаты

ISA         GS     Trans   Sender ID    Receiver ID   INV PO Number   ASN PO Number
100000107   1107   1       2035735845   AMAZON                        2IJW4EUG
100000018   1018   1       00116520M    5032337598                    0082313829
100000096   1096   7       001165208    6111470100                    0026-7684347-0551
                                                                      0026-7684347-0557
                                                                      0026-7684347-0580
                                                                      0026-7684347-0587
                                                                      0026-7684347-0589
                                                                      0026-7684347-3803
                                                                      0026-7684347-3804
100000580   1580   6       2035735845   TGTDVS                        1310548379
                                                                      1310570020
                                                                      1310590953
                                                                      1310596065
                                                                      1310598477
3
27.01.2020, 23:18

Теги

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