Loops 将每3列的集合复制到unix中的新文件中

Loops 将每3列的集合复制到unix中的新文件中,loops,unix,awk,Loops,Unix,Awk,我有一个文件,其中有30列重复的ID名称和位置,我每次需要提取3列并将它们放入新文件中: ID Name Place ID Name Place ID Name Place ID Name place ... 19 john NY 23 Key NY 22 Tom Ny 24 Jeff NY.... 20 Jen NY 22 Jill NY 22 Ki LA 34 Jack Roh .... 所以我会有10个这样的文件- Output1.txt ID Name Place 19 john

我有一个文件,其中有30列重复的ID名称和位置,我每次需要提取3列并将它们放入新文件中:

ID Name Place ID Name Place ID Name Place ID Name place ...
19 john  NY  23 Key NY 22 Tom Ny 24 Jeff NY....
20 Jen NY 22 Jill NY 22 Ki LA 34 Jack Roh ....
所以我会有10个这样的文件-

Output1.txt

ID Name Place 
19 john NY 
20 Jen NY 
Output2.txt

ID Name Place 
23 Key NY
22 Jill NY 
还有8个这样的文件。我可以像这样打印专栏 awk'{print$1,$2,$3}'Input.txt>Output1.txt,但它对于10个文件来说可能太麻烦了。有什么方法可以让它更快吗


谢谢

从这个奇妙的

$ awk '{for (i=1;i<=NF;i+=3) {print $i,$(i+1),$(i+2) > ("output" ((i+2)/3) ".txt")}}' file.txt

#  output1.txt
ID Name Place
19 john NY
20 Jen NY

#  output2.txt
ID Name Place
23 Key NY
22 Jill NY

#  output3.txt
ID Name Place
22 Tom Ny
22 Ki LA

#  output4.txt
ID Name place
24 Jeff NY
34 Jack Roh
将按照您的要求拆分文件


请记住,awk变量d定义了要拆分的列数,在您的情况下,它是3。

从这个奇妙的

$ awk '{for(i=0;i<=NF/3-1;i++) print $(i*3+1), $(i*3+2), $(i*3+3)>i+1".txt"}' file
$ cat 1.txt
ID Name Place
19 john NY
20 Jen NY
将按照您的要求拆分文件


请记住,awk变量d定义了要拆分的列数,在您的情况下,该列数为3。

签出显示了如何从awk内部而不是shell进行重定向。签出显示了如何从awk内部而不是shell进行重定向。向上投票!这是一个比我的更普遍的解决方案。投票!谢谢你,这是一个比我更普遍的解决方案。非常感谢jas!这样一个简洁高效的解决方案,我也试图得到类似的循环,但它不起作用。这太完美了。非常感谢jas!这样一个简洁高效的解决方案,我也试图得到类似的循环,但它不起作用。这太完美了。非常感谢詹姆斯!非常感谢詹姆斯!
$ awk '{for(i=0;i<=NF/3-1;i++) print $(i*3+1), $(i*3+2), $(i*3+3)>i+1".txt"}' file
$ cat 1.txt
ID Name Place
19 john NY
20 Jen NY