Вставка этого вhttps://regexr.com/помогает улучшить отладку.
Вы не экранировали -
в диапазоне, так как -
используется для указания диапазона.
Старый:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Исправление:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
Попробуйте
seq 1 10 | awk '{printf "%40s", $0} !(NR%3) {printf "\n"}'
1 2 3
4 5 6
7 8 9
10
Это попеременно изменит ширину строки между 40, 80, 120 для каждой строки ввода:
awk '{ m = (NR-1) % 3; i = (m+1) * 40; printf "%*s\n", i, $0 }'
Переменные:
m
-номер строки по модулю 3 (, т. е. 0
, 1
, 2
повторяется)i
-отступ для заданного значения m Ввиду отсутствия какой-либо другой инструкции, я продолжал использовать ваше собственное printf
форматирование, так что каждая строка ввода форматируется как отдельная строка вывода, и каждая будет правильно -выравниваться в доступном пространство.
Если вам нужны три 40 -записи столбца в строке, как показано в вашем примере, а не в вашем коде, вы можете использовать это (изменить 40s
на -40s
, если вы хотите оставить -текст по ширине):
awk '{ printf "%40s", $0 } !(NR % 3) { printf "\n" }'
Это можно сделать с помощью инструмента columns
:
$ seq 10 | columns -W 16 -c 3
1 2 3
4 5 6
7 8 9
10
-W 16
— это просто установка ширины линии на что-то маленькое.
columns
не является стандартным инструментом Unix. Это часть GNU AutoGen .
Некоторые версии более распространенной команды column
могут устанавливать количество столбцов с помощью -c
, но современные версии, похоже, изменили его значение, чтобы установить ширину строки по количеству символов.
Также есть pr
, предложенный mpez0 в комментарии:
$ seq 10 | pr -aT3
1 2 3
4 5 6
7 8 9
10
-aT3
— это сокращение от --across --omit-pagination --columns=3
.
pr
находится в coreutils и POSIX, хотя -T
/ --omit-pagination
кажется специфичным для GNU -.
Пробовал с помощью команды «Ниже», протестировано и работает нормально
команда
for ((i=0;i<=10;i++)); do awk -v i="$i" 'NR>i && NR<(i+4)' o| perl -pne "s/\n/ /g";echo -e '\n'; i=$(($i+2)); done
выход
1 2 3
4 5 6
7 8 9
10
Лично я предпочитаю формат
1 4 7
2 5 8
3 6 9
что может быть достигнуто путем
mkdir temp
cat file | while read FN; do
touch "temp/$FN"
done
ls temp
хотя вам, возможно, придется отрегулировать ширину окна, чтобы сделать его тремя столбцами. И вы не можете перенаправить на файл; приходится резать -н -вставить. Перенаправление указывает ls
сделать один столбец.
Инструментом для этой работы являетсяrs
("изменить форму"):
$ seq 10 | rs 0 3
1 2 3
4 5 6
7 8 9
10
Мы можем изменить разделитель столбцов на вкладку:
$ seq 10 | rs -C 0 3
1 2 3
4 5 6
7 8 9
10
Или вправо -выровнять:
$ seq 10 | rs -j 0 3
1 2 3
4 5 6
7 8 9
10
rs
не является стандартным инструментом Unix. Однако он широко доступен. Он был изобретен в 4.2BSD, как и во всех современных BSD. Есть его переносы на операционные системы на базе Linux -, например, на Debian .