【发布时间】:2021-05-25 08:26:45
【问题描述】:
我有以下文件“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)并且只获取整数(例如 1、4 和 22 用于 ABC,3,5 和 3 用于MMM) 并将它们全部放在一个 txt 文件中,例如 solution.txt。
我正在使用以下命令:
cat file.log | grep "ABC" | grep -o '[0-9]\+' > solution.txt
但这只会按顺序打印出 ABC 的整数,即
1
4
22
但是我希望它们是 ABC,然后是 MMM,因为它出现在“file.log”中
想要的输出:
1
3
4
5
22
3
我是否需要将 grep 放入一个循环中以仅一行一行地执行,或者如果它可以与“awk”结合使用,问题就可以解决?
谢谢。
【问题讨论】:
-
我会用 grep 过滤它们,然后使用 cut 来取出数字。当然你可以使用awk直接得到你想要的,但是语法超出我的想象
-
@BingWang 你能否举个例子,当我尝试使用 grep 过滤时,ABC 和 MMM 的整数不在我想要的序列中。所有的 ABC 都在一起,MMM 也是如此。
-
grep -E "^ABC|^XYZ" file.log 稍微净化了结果。最现代的 (GNU) grep 应该可以工作
-
最后一位应该是 3。
-
@BingWang awk 语法是 C 的一个很小的子集,在处理文本时有一些额外的用于执行常用操作。如果您认为它超出了您的范围,那么您就想多了。