在同一文件/列中重复数据列表

在同一文件/列中重复数据列表

我的文件中有一个数据列表,例如

-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

相关内容