【问题标题】:How to cut from one position to another , if 2 positions having a match in unix如果 2 个位置在 unix 中匹配,如何从一个位置切换到另一个位置
【发布时间】:2019-11-21 21:15:56
【问题描述】:

我有一个这样的文件

ABCDEFGH  
IJKLMNOP
QRSTUFWH

如果第 6 位 = F 并且如果第 8 位 = H 我想从位置 2 切到 4

所以输出应该是

BCD
RST

我可以使用此方法将具有匹配模式的记录保存到另一个文件中 -

grep  '^.....F.H' f1.txt > f2.txt

我想要的只是位置 2 到 4 ,它与模式匹配。 请帮忙 谢谢

【问题讨论】:

  • 最好也提及您的操作系统详细信息,例如您正在测试哪个操作系统的命令。请务必在您的帖子中添加此内容。

标签: unix sed grep solaris cut


【解决方案1】:

请您尝试关注一下。

awk 'substr($0,6,1)=="F" && substr($0,8,1)=="H"{print substr($0,2,3)}' Input_file

由于您在问题中添加了 Solaris 标记,请尝试将 awk 更改为 /usr/xpg4/bin/awk,以防您使用的是 Solaris。

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed -En 's/^.(...).F.H.*/\1/p' file
    

    模式匹配并使用分组和反向引用来提取所需的字符串。

    【讨论】:

      【解决方案3】:

      这个 POSIX awk 应该适用于大多数系统:

      awk '$6=="F" && $8=="H" {print $2$3$4}' FS="" file
      BCD
      RST
      

      通过将字段分隔符设置为空,每个字符都成为一个字段,因此只需测试字段 6 和 8,然后打印字段 2-4。

      【讨论】:

      • 您应该提到这依赖于每个 POSIX 的未定义行为。当 FS 为空时,不同的 awk 会做不同的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2014-11-25
      • 2013-05-02
      • 1970-01-01
      • 2011-10-05
      • 2011-06-06
      相关资源
      最近更新 更多