Хотелось бы, чтобы каждая строка в файле повторялась фиксированное количество раз.
например, каждая строка повторяется четыре раза:
a
b
c
будет выглядеть так:
a
a
a
a
b
b
b
b
c
c
c
c
Я провел некоторый поиск, и есть много вопросов и ответов, в том числе и в обратном порядке, например, объединение дублирующих строк в одну строку и, возможно, несколько о дублировании строк путем их повторной печати.
Это было бы легко сделать в C, но хотелось бы знать больше о нативных командах, чтобы мне не приходилось постоянно прибегать к подобным одноразовым выбрасываниям.
text-processing
sed
awk
perl
Иминь Ронг
источник
источник
awk
«ыfor
не нуждается в фигурные скобки , если есть только одна команда , чтобы повторить. Иperl
проще , если вы используетеforeach
цикл:for$i(0..3){print}
.perl -ne 'print(($_)x4)'
. Кроме того, вы должны цитировать$line
(в эхо) в вашей версии Bash.BEGIN { ORS="\r\n" }
Интересно, превращается ли это в матч по гольфу?
Объяснение:
p
Команда sed должна напечатать текущую строку. Поведение по умолчанию состоит в том, чтобы напечатать текущую строку непосредственно перед переходом к следующей строке (поэтому sed должен-n
позволить вам отключить ее). У некоторых старых версий нет точки с запятой (я думаю), поэтому возможно, вам придетсяsed -e p -e p -e p
Awk работает с
condition {action}
парами. Если действие опущено, по умолчанию печатается текущая строка, если условие возвращает true. Awk, как и многие C-подобные языки, воспринимается1
как истина. (Для полноты, если условие опущено, действие будет выполнено для каждой записи.)Многие функции perl используют преимущества переменной «default». Этот однострочник эквивалентен (на Perl 5.16):
источник
1
в awk? Сокращения дляprint $0
?1
(true); блок по умолчанию эквивалентен{print}
. Таким образом, оператор1
будет означать печать текущей строки buffer ({print}
). ({print}
и{print $0}
в основном такие же, Qed.)sed
том, чтобы точка с запятой не использовалась как терминатор команд; есть ли такая вещь?источник
Вы можете сделать это без необходимости
sed
,perl
илиawk
.или используя цикл while:
Примеры
для цикла в то время как циклисточник
Используя чисто оболочку:
источник
--help
как строку вместо опции? [рассмотрим случай, когдаline
есть--help
или другой вариант]yes -- --help
yes
иhead
означает, что это не «чисто оболочка»Это может работать для вас (GNU sed):
Повторим каждую строку 4 раза.
Или, если вы предпочитаете:
Где вы повторяете каждую строку еще 3 раза.
источник
Ответ @potong не работает с пустыми строками, замена
\+
на*
должна исправить это:источник