在具有两个分隔符的文件中搜索值

Nit*_*esh 4 linux bash shell awk

我有一个以下格式的数据文件

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
Run Code Online (Sandbox Code Playgroud)
  • 分隔符是"|"
  • 第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
Run Code Online (Sandbox Code Playgroud)

我目前正在使用以下命令,但我正在寻找一个更高效/有组织的命令

awk -F"|" '$4 ~ /,3,/ || $4 ~ /^3,/ || $4 ~ /,3$/'
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 5

简短的GNU awk解决方案:

awk -F'|' '$4 ~ /\<3\>/' file
Run Code Online (Sandbox Code Playgroud)
  • \<\>-代表的开始结束的的分别

输出:

1|col2|col3|105,230,3,44,59,62|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5
Run Code Online (Sandbox Code Playgroud)

或者更统一/便携的:

awk -F'|' '$4 ~ /(^|,)3(,|$)/' file
Run Code Online (Sandbox Code Playgroud)