我有一个包含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个文件来说可能过于繁琐。反正我还能加快速度吗?
谢谢!
答案 0 :(得分:3)
$ 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
答案 1 :(得分:3)
从这个精彩的Ed Morton's answer,
中稍微调整一下awk -v d=3 '{sfx=0; for(i=1;i<=NF;i+=d) {str=fs=""; for(j=i;j<i+d;j++) \
{str = str fs $j; fs=" "}; print str > ("output_file_" ++sfx)} }' file
将根据您的要求分割文件。
请记住,awk
变量d
定义要拆分的列数,在您的情况下为3。
答案 2 :(得分:1)
$ 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