我的文件中有一个数据列表,例如
-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
允许它的s(即最后一行读取在该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