grep/awk 第三列包含字符串

grep/awk 第三列包含字符串

字符串示例

blah:blah:example - 1234
blah1:blah2:example2 - 3213

我想检查的内容是否存在

- 1234

但数字可以不同

我知道我可以使用

awk -F: '$3 ~ / - /' 

检查“ - ”是否存在,但如何应用数字可能性?

答案1

所以你基本上想检查“-”后面是否有一些数字?
如果你想这样做,你可以写
awk -F: '$3 ~ / - [0-9]+/'


更先进的解决方案

如果您的最后一个数字有一个可能值的数组(例如 1、2、3、4、5),您可以编写如下内容。

values=(1 2 3 4 5)
awk -v vals="$(echo ${values[@]})" \
'{if(match(vals,$3" ")){print $0}}' input_file.txt

这将仅打印您指定的数组input_file.txt中具有最后一个数字的那些条目。values

答案2

以下命令将显示倒数第二个空格分隔列中包含a 且最后一个空格分隔列中包含正整数的awk所有行:file-

awk '$(NF-1) == "-" && $NF ~ /^[0-9]+$/' file

以下grep命令可以完成相同的操作:

grep -E -e '-[[:space:]]+[0-9]+$' file

需要-E来理解+模式中的修饰符,并且-e需要停止将模式中的grep解释为命令行选项(也可以更改为 替换,这表示任何命令行选项的结束)。--e--

相关内容