同じファイル/列に重複したデータのリストがあります。

同じファイル/列に重複したデータのリストがあります。

私のファイルには次のデータのリストがあります。

-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

関連情報