我在一个目录中有32个文件。
每个文件的格式如下-
geneA样本geneB
名称countsAcountsB
我希望剪切前两列并将其粘贴到geneA的32个文件中,而第一列和第三列将插入geneB的文件中。
我尝试的是cut -f1,2 * > *_geneA.txt
,其中输出中的*
被当作字符。有一种方法可以一次完成吗?
谢谢。
答案 0 :(得分:1)
此GNU awk程序(请参阅注释中的@EdMorton的注释)从第一条记录中获取目标文件的字段名称,根据文件名和字段名称创建文件,并将字段附加到该文件中。在下面的示例中,我在文件file1
和file2
中两次使用了您的示例数据:
$ awk '
FNR==1 { # first record of each file
for(i=2;i<=NF;i++) # iterate field names
f[i]=$i # and hash them to f
}
{ # for all records
for(i=2;i<=NF;i++) { # iterate all but first field
file=FILENAME "_" f[i] ".txt" # form the file name
print $1,$i > file # and print to it
}
}' file1 file2
让我们看看做了什么:
$ ls -rt | tail -n 4
file1_geneB.txt
file1_geneA.txt
file2_geneB.txt
file2_geneA.txt
让我们看一看:
$ cat file1_geneA.txt
Sample geneA
Name countsA