У меня есть файл, который похож на это
888
924
873
1374
.....
Точки указывают, что у меня есть намного больше строки, приблизительно 3 000. Я хочу повторение каждая строка n время, чтобы иметь что-то вроде этого;
888
888
888
924
924
924
873
873
873
....
Я пытался написать маленький код удара:
#! bin/bash
while IFS= read -r line
do
awk 'NR==line'
awk 'NR==line'
awk 'NR==line'
done < /<PATH_TO_FILE>
Но я не получаю результатов. Я думал, что это было довольно легкой задачей, но очевидно я пропускаю что-то. Кто-либо советует?
В этом можно легко выполнить perl
:
perl -ne 'print $_ x 3' file
вышеупомянутая острота произвела:
$ perl -ne 'print $_ x 3' file
888
888
888
924
924
924
873
873
873
1374
1374
1374
Просто измените демонстрационное значение для своих потребностей.
awk
решение:
awk '{for (i = 1; i <= 3; i++) print $1}' file
Для фиксации сценария удара, я использовал бы следующий отрывок вместо этого:
#!/bin/bash
while read line
do
for i in {1..3}; do echo $line; done
done < ./file
Существует хороший прием для печати строки неоднократно:
$ printf "%0.s-" {1..10}
----------
, На основе которого, мы можем циклично выполниться через файл и печатать строку так много раз, как мы указываем в выражении фигурной скобки:
while IFS= read -r line
do
printf "%0.s$line\n" {1..3}
done < file
change this number as you wish
v
$ while IFS= read -r line; do printf "%0.s$line\n" {1..3}; done < a
888
888
888
924
924
924
873
873
873
1374
1374
1374
, Хотя мое предпочтение должно было бы использовать awk
как это, очень похожее на то, что другие отправили прежде (хорошие ответы между прочим):
awk -v tot=3 '{for (i=1; i<=tot; i++) print}' file
Вы можете просто сделать это через sed.
$ sed 's/\(.*\)/\1\n\1\n\1/g' file
888
888
888
924
924
924
873
873
873
1374
1374
1374