У меня есть файл с таким текстом:
AAAA
BBBB
CCCC
DDDD
1234
5678
9012
3456
EEEE
7890
и т.д...
И я хочу сопоставить буквенные линии с числовыми линиями, чтобы они выглядели так:
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
Кто-нибудь знает простой способ добиться этого?
emacs
... Вы ищетеelisp
решение или как запустить shell-скрипт из Emacs?Ответы:
Один из способов использования
perl
:Содержание
script.pl
:Содержание
infile
:Запустите это как:
И результат:
источник
s/\A\s*(.*?)\s*\Z/\1/
.В
awk
, сохраняя пустые строки, предполагая, что файл хорошо отформатирован, но можно добавить логику для проверки файла:источник
или, за один шаг, без временных файлов
Последний
sed
шаг удаляет разделитель на пустых строках, который вводитсяpaste
...источник
В emacs используйте операции с прямоугольниками, чтобы вырезать текстовые строки и вставить их перед числовыми строками.
источник
Если записи в порядке,
Разбейте ввод на буквенные и числовые записи, используя
grep
:grep "[[:alpha:]]\+" < file > alpha
grep "[[:digit:]]\+" < file > digit
Соедините два полученных файла
alpha
иdigit
, используяpaste
:paste alpha digit
(можно добавить,-d " "
чтобы вместо табуляции использовался пробел)источник
paste <(grep "[[:alpha:]]\+" file) <(grep "[[:digit:]]\+" file)
или с помощью одного процесса замещения:grep "[[:alpha:]]\+" file | paste - <(grep "[[:digit:]]\+" file)
.Жаль, что у awk нет хороших функций push / pop / unshift / shift. Вот короткий фрагмент Perl
источник
default
предложения сразу выводятся пустые строки, поэтому перед строкой «AAAA» будет отображаться пробел перед «1234».Дайте файл с текстом, попробуйте использовать
pr
и обработать синтаксис подстановок, как показано ниже:Вы можете отрегулировать ширину на
-w9
или удалить пробелы наsed "s/ //g"
.источник