使用后处理在txt文件中搜索模式

时间:2017-08-02 06:38:23

标签: bash text awk sed

我有一个由

组成的长文本文件
ATOM   5010 HD13 LEU   301       0.158  20.865  10.630  1.00  0.00      PROA
ATOM   5011  CD2 LEU   301       1.684  22.404  12.349  1.00  1.00      PROA
ATOM   5012 HD21 LEU   301       2.233  22.501  13.310  1.00  0.00      PROA
ATOM   5013 HD22 LEU   301       1.584  23.412  11.894  1.00  0.00      PROA
ATOM   5014 HD23 LEU   301       2.267  21.744  11.672  1.00  0.00      PROA
ATOM   5015  C   LEU   301      -0.687  23.995  15.639  1.00  0.00      PROA
ATOM   5016  O   LEU   301      -1.791  24.341  15.139  1.00  0.00      PROA
ATOM   5017  NT  LEU   301      -0.211  24.391  16.849  1.00  1.00      PROA
ATOM   5018  HT1 LEU   301       0.679  24.065  17.168  1.00  0.00      PROA
ATOM   5019  HT2 LEU   301      -0.752  25.007  17.422  1.00  0.00      PROA
ATOM   5020  SOD SOD   302       1.519   2.284   1.361  1.00  0.00      HETA

从这个文件我需要复制第三列= SOD

的字符串
  ATOM   5020  SOD SOD   302       1.519   2.284   1.361  1.00  0.00      HETA

将其传递给单独的txt文件sod.txt(它应该只包含一行与原始文件相同的行)

我可以通过awksed命令组合使用解决方案!

3 个答案:

答案 0 :(得分:2)

您可以使用sed write(w命令):

sed '/\([^ \t]*\)\{2\}SOD/!d; w outputfile' file

答案 1 :(得分:1)

在awk中:

$ awk '$3=="SOD"' file # > new_file # uncomment to write to a new file
ATOM   5020  SOD SOD   302       1.519   2.284   1.361  1.00  0.00      HETA

答案 2 :(得分:1)

你可以试试这个

awk '{if ($3 == "SOD") print $0;}' input.txt >sod.txt