Как преобразовать один столбец в 3 столбца?

Вставка этого вhttps://regexr.com/помогает улучшить отладку.

Вы не экранировали -в диапазоне, так как -используется для указания диапазона.

Старый:

cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/

Исправление:

cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/

6
29.02.2020, 17:46
7 ответов

Решение сpaste

seq 10 | paste - - -
1       2       3
4       5       6
7       8       9
10

paste— это стандартный инструмент Unix, и стандарт гарантирует, что он работает как минимум для 12 столбцов.

42
28.04.2021, 23:22

Попробуйте

seq 1 10 | awk '{printf "%40s", $0} !(NR%3) {printf "\n"}'
                                       1                                       2                                       3
                                       4                                       5                                       6
                                       7                                       8                                       9
                                      10
7
28.04.2021, 23:22

Это попеременно изменит ширину строки между 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" }'
4
28.04.2021, 23:22

Это можно сделать с помощью инструмента 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 -.

8
28.04.2021, 23:22

Пробовал с помощью команды «Ниже», протестировано и работает нормально

команда

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 
0
28.04.2021, 23:22

Лично я предпочитаю формат

1  4  7
2  5  8
3  6  9

что может быть достигнуто путем

mkdir temp
cat file | while read FN; do
  touch "temp/$FN"
done
ls temp

хотя вам, возможно, придется отрегулировать ширину окна, чтобы сделать его тремя столбцами. И вы не можете перенаправить на файл; приходится резать -н -вставить. Перенаправление указывает lsсделать один столбец.

-2
28.04.2021, 23:22

Инструментом для этой работы является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 .

6
28.04.2021, 23:22

Теги

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