提取第3列中字符匹配的行

时间:2019-06-14 08:30:24

标签: shell awk sed

我需要提取第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

1 个答案:

答案 0 :(得分:1)

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

使用

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

请参见demo online$3 ~ /^38$/是一个正则表达式匹配检查,针对与匹配等于^38$的整个字符串的38正则表达式测试字段3的值。

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

awk '$3 == "38"'  file