【问题标题】:remove lines that match column condition in Unix/bash删除与 Unix/bash 中的列条件匹配的行
【发布时间】:2013-02-17 21:48:02
【问题描述】:

如果Nth 字段中包含字符串s,那么在bash 中执行快速单行以过滤掉制表符分隔文件中的所有行的最佳方法是什么?示例:

$ cat myfile 
A  B_crop  C
A  X_mock  D

$ cat myfile | filter -V -c 2 -s "crop"
A  X_mock  D

组合命令filter 采用列号(从1 开始)-c、字符串-s,并仅保留在给定列中具有该字符串的行。如果它通过了-V 然后就像grep 一样,它会排除没有字符串的行是该列号中的子字符串。谢谢。

【问题讨论】:

    标签: python unix subprocess pipe


    【解决方案1】:

    由于您想要基于列的排除,我会使用awk

    awk '$2 == "crop" { print $0 }' myfile
    

    $2 表示使用第 2 列进行比较。要实现-V 功能,请使用!= 而不是==

    您还可以使用正则表达式检查来检查子字符串:

    awk '$2 ~ /crop/ { print $0 }' myfile
    

    正则表达式匹配也可以用!~ 否定。

    【讨论】:

    • 但这不检查子字符串对吧?我想看看crop是否在与列对应的字符串中的某处
    • @user248237dfsf 您可以通过管道连接到 awk:echo "abc" | awk "{print $0}"。在这种情况下,您不想这样做,因为这是一种浪费,但您当然可以这样做。
    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2016-12-31
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多