2013-07-31 80 views
1

我想从一个更大的文件中按列分割创建大量文件。例如,我的大文件的标题是这样的:用awk打印三列,然后打印三列

Name Chr Position SNP1A SNP1B SNP1C SNP2A SNP2B SNP2C SNP3A SNP3B SNP3C

,我想创建这些文件:

Name Chr Position SNP1A SNP1B SNP1C

Name Chr Position SNP2A SNP2B SNP2C

Name Chr Position SNP3A SNP3B SNP3C

我一直试图使用awk,但我有点新手无线日,所以我的命令当前读取:

for ((i=1; i<=440;i++)); do awk -f printindivs.awk inputfile done 

其中printindivs.awk是: {print $1 $2 $3 $((3*$i)+1) $((3*$i)+2) $((3*$i)+3))}

我得到的输出表明,我试图让三个组的方法是错误的:如何我可以这样做吗?

感谢

+0

移动'for'循环进入'awk'代码。 – Kevin

回答

1

为此,您可以轻松地将只是一个简单的脚本awk

$ awk '{for(i=4;i<=NF;i+=3)print $1,$2,$3,$i,$(i+1),$(i+2) > ("out"++j)}' file 

输出文件将在out[1..n]

$ cat out1 
Name Chr Position SNP1A SNP1B SNP1C 

$ cat out2 
Name Chr Position SNP2A SNP2B SNP2C 

$ cat out3 
Name Chr Position SNP3A SNP3B SNP3C 
+0

这将打印文件每一行的单个文件。我想打印列 – Joni

+0

看看你问的问题,你不提一次列!您显示预期的输出,这就是我的解决方案。你想打印这些列,你甚至想要做什么! –

+0

标题是“用awk打印三列,然后是三列”,我在文本中明确地使用了单词列,并且我引用了一个标题。正如它发生的那样,我当时正在st and,只需要使用切割。 – Joni