我有以下格式的数据文件

1|col2|col3|105,230,3,44,59,62|col5
2|col2|col3|43,44|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5
4|col2|col3|1,2,37|col5
  • 分隔符是“|”
  • 第 4 列是一组逗号分隔的数字。
  • 我需要在第 4 列中分别具有数字“3”的记录,但诸如 43 或 33 之类的数字不应计算在内。
  • "3"可以在第 4 列的开头、第 4 列的中间或第 4 列的末尾

  • 因此,来自上述给定数据的理想记录是
    1|col2|col3|105,230,3,44,59,62|col5
    3|col2|col3|1,2,3,4,5,6,7,8|col5
    

    我目前正在使用以下命令,但我正在寻找一个更有效/更有组织的命令
    awk -F"|" '$4 ~ /,3,/ || $4 ~ /^3,/ || $4 ~ /,3$/'
    

    最佳答案

    简短的 GNU awk 解决方案:

    awk -F'|' '$4 ~ /\<3\>/' file
    
  • \<\> - 分别代表单词的开头和结尾

  • 输出:
    1|col2|col3|105,230,3,44,59,62|col5
    3|col2|col3|1,2,3,4,5,6,7,8|col5
    

    或者更统一/便携的:
    awk -F'|' '$4 ~ /(^|,)3(,|$)/' file
    

    关于linux - 在具有两个分隔符的文件中搜索值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48883287/

    10-10 17:44