【问题标题】:Searching patterns within txt file with post-processing使用后处理在 txt 文件中搜索模式
【发布时间】:2018-01-09 05:31:31
【问题描述】:

我有一个很长的txt文件,由

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 命令的组合使用解决方案!

【问题讨论】:

  • awk '$3 == "SOD"{print > "output.txt"}' file
  • 你自己尝试了什么?

标签: bash text awk sed


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在 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
    

    【讨论】:

    • 谢谢!以及如何使其适应多种情况 - 例如,当我正在寻找第三列 == A 或 ==B 的字符串并将它们放入一个新文件中时,保持其与原始文件的顺序?
    • $3=="A" || $3=="B" 其中|| 是或。
    • 其实是$3 ~ /^(SOD|A|B)$/,所以你不需要一直重复$3 ==
    【解决方案3】:

    你可以试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2017-08-15
      • 2019-02-13
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多