私のファイルには次のデータのリストがあります。
-0.2947990000000000
0.1722064000000000
0.1722064000000000
0.1722064000000000
0.0315420000000000
次の出力ファイルを取得するために、このデータシーケンスを35回繰り返したいと思います。
-0.2947990000000000
0.1722064000000000
0.1722064000000000
0.1722064000000000
0.0315420000000000
.
.(x35 times)
.
-0.2947990000000000
0.1722064000000000
0.1722064000000000
0.1722064000000000
0.0315420000000000
答え1
単純なfor
ループを使用してください。
for i in {1..35}; do cat input_file >> new_file; done
答え2
正確な入力データ構造(つまり、空行がない)とawk
それを許可する(つまり、最後に読み取った行をEND
セクションで使用できる)ことを確認するには、以下を試してください。
$ awk 'END {for (i=1; i=35; i++) print}' RS= file
-0.2947990000000000
0.1722064000000000
0.1722064000000000
0.1722064000000000
0.0315420000000000
.
.
.
-0.2947990000000000
0.1722064000000000
0.1722064000000000
0.1722064000000000
0.0315420000000000
編集: またはより短く、
awk 'END {for (i=35; i--;) print}' RS= file
答え3
awkでは、ファイル行を配列に追加し、ENDステートメントの入れ子になったループを介して配列を繰り返すことでこれを実行できます。
awk '{a[i++]=$0} END{ for(c=1;c<=35;c++) for(j=0;j<=i;j++) print a[j]}' data.txt
もちろん、ファイルの行数が非常に多い場合は、cat
次のようにファイルを複数回追加する方が適切です。ローマ人の答え
答え4
yes input_file | sed 35q | xargs cat > output_file
または次のようにawk
:
awk 'BEGIN{while(ARGC<36)ARGV[ARGC++]=ARGV[1]}1' input_file
awk 'BEGIN{f=ARGV[1]; for(i=35;i--;){while((getline <f) > 0) print; close(f)}}' input_file