我有一个如下所示的文件:
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0
chr1 1355707 . G T . . DP=69;ECNT=1;NLOD=4.51 GT:AD:AF:F1R2 0/1:50,3:0.059:20,3
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4
chr1 2550056 . TC CT . . DP=99;ECNT=1;NLOD=9.03 GT:AD:AF:F1R2 0/1:63,2:0.053:33,2
我想打印第 10 列中的第三个值大于 0.06 的行。
cat file.txt | cut -f 10 | cut -f 3 | awk -F':' '$3>0.06'
只会给我:
0/1:37,2:0.063:13,0
0/1:30,2:0.089:12,4
我想要整条线。用awk可以做到吗?
答案1
一旦您开始丢弃管道中的数据(确实如此cut
),您就无法在同一管道的后续阶段将其取回。
反而,
$ awk 'split($10,a,":") && a[3] > 0.06' file
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4
这需要第 10 个空格分隔的字段并将其按冒号分割到数组中a
。如果split()
中生成的任何元素a
并且 的第三个元素a
大于 0.06,则打印原始行。
如果文件中的字段以制表符分隔并且任何字段包含空格,则使用-F '\t'
withawk
确保它正确找到正确的字段(据我所知,给定的示例数据不存在任何此类问题)。
寻址评论中的后续问题:
awk 'split($10,a,":") && a[3] > 0.06 && split($11,b,":") && b[3] > 0.01' file
答案2
awk -F':' '$(NF-1) > 0.06 {print $0}' file
只需使用“:”作为分隔符并评估倒数第二列
答案3
阅读评论后,很明显您的示例数据与实际数据不匹配(并且它首先使用空格而不是制表符,这意味着即使您自己设备的命令输出也无法工作),但是已经拼凑在一起一个不同的输入文件,如下所示:
cat file.txt
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0 0/1:37,2:0.0005:13,0
chr1 1355707 . G T . . DP=69;ECNT=1;NLOD=4.51 GT:AD:AF:F1R2 0/1:50,3:0.059:20,3 0/1:50,3:0.0005:20,3
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4 0/1:30,2:0.0015:12,4
chr1 2550056 . TC CT . . DP=99;ECNT=1;NLOD=9.03 GT:AD:AF:F1R2 0/1:63,2:0.053:33,2 0/1:63,2:0.0005:33,2
然后这将输出所有匹配的行两个都状况:
awk -F"[ :]" '$15>0.06 && $19>0.001' file.txt
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4 0/1:30,2:0.0015:12,4
答案4
我使用下面的方法来达到结果
for i in `awk '{print $NF}' file.txt | awk -F ":" '$3>"0.06"{print $0}'`; do awk -v i="$i" '$NF ==i{print $0}' file.txt ;done
输出
chr1 1197592 . C A . . DP=67;ECNT=1;NLOD=8.12 GT:AD:AF:F1R2 0/1:37,2:0.063:13,0
chr1 1641723 . TC T . . DP=59;ECNT=1;NLOD=2.40 GT:AD:AF:F1R2 0/1:30,2:0.089:12,4
[root@praveen_linux_example ~]#