1

I need to extract the lines where my 3rd column is equal to 38.

I am trying the following command:

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

Sample file contents:

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
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563
shome
  • 1,342
  • 1
  • 12
  • 30

1 Answers1

2

When you use {printf "$3=38"}' you tell awk to print literal $3=38 when a line is found. You need to use a condition, that is, an expression outside of braces.

Use

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

See demo online. The $3 ~ /^38$/ is a regex matching check, Field 3 value is tested against ^38$ regex that matches a whole string eequal to 38.

Or, use a simple string equality comparison (since 38 is a static text):

awk '$3 == "38"'  file
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563