我有以下文件"file.log":
ABC : 1
XYZ : 10
MMM : 3
ABC : 4
XYZ : 22
MMM : 5
ABC : 22
XYZ : 1
MMM : 3
... and so on
我正试图编写一个bash脚本,将检查ABC和MMM的每一行(不需要XYZ),只抓取整数(例如ABC的1,4和22,MMM的3,5和3),并将它们全部放在一个txt文件中,例如,solution.txt。
我正在使用以下命令:
cat file.log | grep "ABC" | grep -o '[0-9]+' > solution.txt
但这只按顺序打印出ABC的整数,即
1
4
22
但是,我希望它们是ABC后面跟着MMM,按照它在
中的顺序。期望输出:
1
3
4
5
22
3
我是否需要将grep放在循环中,以便只在另一行之后执行,或者它是否可以与"awk"结合使用?这个问题可以解决吗?
谢谢。
$ awk '/^(ABC|MMM) /{print $NF}' file
1
3
4
5
22
3
awk
来救援!
$ awk -F' *: *' '$1=="ABC" || $1=="MMM" {print $2}' file
根据显示的样品,您可以尝试以下操作吗?在GNUawk
下编写和测试。
awk -F'[[:space:]]*:[[:space:]]*' '/^(ABC +|MMM +)/{print $2}' Input_file
我用王兵的方法解决了这个问题
cat file-log | grep -E "^ABC|^XYZ" | grep -v "ABC|XYZ" | grep -o '[0-9]+' > result.txt