如何使用grep或awk从文件中获取特定的数字并将它们放在文本文件中?



我有以下文件"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

最新更新