首页 > 解决方案 > 提取第三列中字符匹配的行

问题描述

我需要提取我的第 3 列等于的行38

我正在尝试以下命令:

awk '{printf "$3=38"}' file

示例文件内容:

TRINITY_DN66807_c0_g1_i1    4   *   0   0   *   *   0   0   TTTAAGAAAATTACAGCCTGAACTAGATGAATTGCAAAAACTCATAGGCAAAAAGGAAGAAGAAATTGGATACGT *
TRINITY_DN66871_c0_g1_i1    4   *   0   0   *   *   0   0   AAGAGGACATAGAAACTGTGATGATAATAGTATTGCTCTACTATTTCCTATAGCTCAGTTATTCAGCTGTCAGTC *
TRINITY_DN66847_c0_g1_i1    0   38  2520299 37  274M    *   0   0   CTCTCCTAGGATGCAGGATGGCCTCTTGCCACCTACACCCTTCTTCATGGGTTCGGCCCTTGGTCAACTAAAGGA *   XT:A:U  NM:i:0  X0:i:1  X1:i:0  XM:i:0  XO:i:0  XG:i:0  MD:Z:274
TRINITY_DN66836_c0_g1_i1    0   38  21725268 37 733M    *   0   0   TAGATGATGAAACTGGGTTGACCCTTGTTCCTAAGACTCAGTCCAGAGAGTCCTGGACTTTGCACTTTGGTTAGATGCCCCTGCCCCTCCCGCCAGCGCTGAGGAGGAATCACGCAGGCCTGAACAGAACATTCAGGTGATCCTATGAAG  *   XT:A:U  NM:i:0  X0:i:1  X1:i:0  XM:i:0  XO:i:0  XG:i:0  MD:Z:733

标签: shellawksed

解决方案


当您使用时,{printf "$3=38"}'您告诉 awk 在$3=38找到一行时打印文字。您需要使用条件,即大括号外的表达式。

利用

awk '$3 ~ /^38$/'  file

在线查看演示。这$3 ~ /^38$/是一个正则表达式匹配检查,字段 3 值针对^38$匹配整个字符串等于的正则表达式进行测试38

或者,使用简单的字符串相等比较(因为38是静态文本):

awk '$3 == "38"'  file

推荐阅读