このようなファイルがあります
888
924
873
1374
.....
ドットは、さらに多くの文字列(約3000)があることを示しています。各文字列をn回繰り返して、このようなものにする必要があります。
888
888
888
924
924
924
873
873
873
....
私は小さなbashコードを書こうとしました:
#! 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
上記のoneliner出力:
$ 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
Bashスクリプトを修正するには、代わりに次のスニペットを使用します。
#!/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