【问题标题】:linux - Seach and delete records where 2nd column starts withlinux - 搜索和删除第二列开头的记录
【发布时间】:2018-04-08 02:40:01
【问题描述】:

"2017-09-04","D","0015","1","0015","08080000",60371,18923315.66

这是我的文件 abc 中的一个示例记录,我想从中删除所有以 02 开头的记录,例如 -

“02080000”
"02100000"

等等...(请考虑“在本专栏的开头),我尝试了 awk,但它在我的 Linux 上不起作用 -

awk -F","'$6 != /^"02/' abc > abc_correct

【问题讨论】:

    标签: linux unix awk sed


    【解决方案1】:

    != 更改为!~

    ~!~ 这两个运算符执行正则表达式比较

    awk -F"," '$2 !~ /^"02/' infile >outfile
    

    第 6 列

    awk -F"," '$6 !~ /^"02/' infile >outfile
    

    可能有用:

    Awk 中的比较运算符用于比较数字的值 或字符串,它们包括以下内容:

    • > - 大于
    • < - 小于
    • >= – 大于或等于
    • <= – 小于或等于
    • == - 等于
    • != - 不等于
    • some_value ~ /regexp/ – 如果 some_value 匹配正则表达式则为真
    • some_value !~ /regexp/ – 如果 some_value 与正则表达式不匹配,则为 true

    【讨论】:

    • 感谢@3161993,它成功了!如果我想在搜索时加入多个 Regexp 怎么办?我尝试了几个选项,但这些代码对我不起作用 - awk -F"," '$6 !~ /"02*&&"03*&&"07*/' myfile > myfile2
      awk -F"," '$6 !~ /"02*/ || /"03*/ || /"07*/' myfile > myfile2
      awk -F"," '$6 !~ /"02*|"03*|"07*' myfile > myfile2
    • awk '$6 !~ /regexp1/ && $6 !~ /regexp2/' youfile 您可以与&& 运营商合作,甚至在您的情况下awk -F, '$6 !~ /"0(2|3|7)/' file 请阅读meta.stackexchange.com/questions/5234/…
    【解决方案2】:

    您可以使用

    删除位置 2 和 3 上带有 02 的行
    grep -vE '^.02 abc
    

    v - 跳过行
    E - 表达式
    ^ - 行首
    . - 任何字符

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2015-11-01
      • 2023-02-23
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多