如何从目录中的所有文件切出列并使用相同的名称制作新文件?

时间:2019-03-18 08:57:29

标签: grep cut

我在一个目录中有32个文件。

每个文件的格式如下-

  

geneA样本geneB

     

名称countsAcountsB

我希望剪切前两列并将其粘贴到geneA的32个文件中,而第一列和第三列将插入geneB的文件中。

我尝试的是cut -f1,2 * > *_geneA.txt,其中输出中的*被当作字符。有一种方法可以一次完成吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

此GNU awk程序(请参阅注释中的@EdMorton的注释)从第一条记录中获取目标文件的字段名称,根据文件名和字段名称创建文件,并将字段附加到该文件中。在下面的示例中,我在文件file1file2中两次使用了您的示例数据:

$ 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