首页 > 解决方案 > 如何将 awk 指令的结果输出到与当前工作目录不同的目录

问题描述

背景:我有 48 个文件试图使用 awk 按某个列中的值进行拆分。我的数据的一个例子是:

chr pos ref alt reffrq  info    rs  pval    effalt  gene
chr1    13417   C   CGAGA   0.0915493   1   rs777038595 0.978587    0.0051328   DDX11L1
chr1    17559   G   C   0.00662252  1   rs866150608 0.138321    0.985859    DDX11L1
chr1    54421   A   G   0.0448276   1   rs146477069 0.534267    0.177514    BLAH
chr1    54490   G   A   0.191489    1   rs141149254 0.830873    0.0307553   BLAH

在这个文件中,该gene列由数千个不同的名称组成,我想将这些巨大的文件拆分为每个不同基因名称的文件(所以我在这里以DDX11L1.txtand结尾BLAH.txt)。

根据在上一个问题中找到的代码,我有一个解决方案可以逐个处理每个文件:

awk '{print >> $10".txt"}' tissue1.txt

问题:然而,我现在想做的是自动对 48 个文件中的每一个进行迭代,并将每个拆分文件分隔到每个较大文件的新目录中。

这是我到目前为止所提出的(其中tissue之前从表中定义,也是每个大文件的前缀):

mkdir /inputs/"$tissue"
workingDir=/inputs/"$tissue"

awk -v tissue="$tissue" -v workingDir="$workingDir" '{print >> "$workingDir"/$10".txt"}' "$tissue"_input.txt

这里的问题是将文件输出到我当前所在的同一目录中,然后文件的名称$workingDirGENENAME.txt显然不是我想要的。所以基本上我只是不明白我需要在哪里放置输出目录的变量。

标签: awk

解决方案


原来这只是对 awk 使用的语法的误解。

以下似乎有效:

awk -v tissue="$tissue" -v workingDir="$workingDir" '{print >> workingDir "/" $10".txt"}' "$tissue"_input.txt

推荐阅读