У меня есть текстовый файл:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
Как я могу обработать это и получить файл с 2 столбцами, как это:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Или файл из трех столбцов, например:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Я предпочитаю получить решение awk, но приветствуются и другие решения.
text-processing
awk
Просто ученик
источник
источник
$1
в качестве строки формата дляprintf
?"%s", ...
. Обновленоawk
команде в вашем другом ответе на этот вопрос, кстати.Поместите каждое поле в строку и постколонку.
Каждое поле в одной строке
тр
Grep
СЭД
или более портативный:
AWK
или
Columnate
вставить
Для 2 столбцов:
Для 3 столбцов:
и т.п.
СЭД
Для 2 столбцов:
Для 3 столбцов:
и т.п.
xargs
При
xargs
использовании/bin/echo
для печати, остерегайтесь того, что данные, которые выглядят как параметры,echo
будут интерпретироваться как таковые.AWK
пр
или
колонки (из пакета автогена)
Типичный вывод:
источник
xargs
линия не должна звонитьecho
илиprintf
?xargs
звонки/bin/echo
по умолчаниюxargs
это выглядит как варианты,/bin/echo
вызывающие проблемы ... Я добавил предупреждение.источник
Как заметил Уилкард, это будет работать только в том случае, если ваш файл хорошо отформатирован, поскольку в нем нет специальных символов, которые оболочка будет интерпретировать как глобусы, и вы будете довольны правилами разделения слов по умолчанию. Если есть какие-либо вопросы о том, пройдут ли ваши файлы этот тест, не используйте этот подход.
Одна из возможностей будет использовать,
printf
чтобы сделать это какЭто будет разбивать слова на содержимое
your_file
, соединять их и печатать с вкладками между ними. Вы можете использовать больше%s
строк формата,printf
чтобы иметь дополнительные столбцы.источник
(заменить 4 на количество столбцов)
источник
rs
Утилита BSD (изменение формы):0 2
это строки и столбцы . Указание0
означает «вычислять строки автоматически из столбцов».источник
Подход сценария Python.
Основная идея здесь состоит в том, чтобы свести все слова в вашем тексте в один список, а затем печатать новую строку после каждого второго элемента (это для столбцов в два столбца). Если вы хотите 3 столбца, измените
index%2
наindex%3
Образец вывода:
Версия с тремя колонками (как сказано выше, только
index%3 == 0
изменена)источник