从文件中提取模式

从文件中提取模式

我正在尝试从 bash 脚本中的 cat 文件中抽取模式。我需要逐行抽取 10 和 80 行。我该怎么做?

Total Branch Predictor Mispredictions: 10
Total Branch Predictor OK predictions: 80

答案1

$ cat > data
Total Branch Predictor Mispredictions: 10
Total Branch Predictor OK predictions: 80
$ cat data | awk '{print $NF}'
10
80
$ cat data | awk '{printf "%s ",$NF}'
10 80 $ awk '{printf "%s ",$NF}' < data
10 80 $

awk不仅知道$1$2来解决n第列,但也要$NF处理最后一列(在本例中为1080)。第二条命令使用printf而不是print将所有内容吐出一行(注意末尾缺少换行符)。第三条命令避免使用cat

还有一种解决方案涉及sed

$ sed 's/^[^:]*: \([0-9]*\)/\1 /' < data
10
80

其中仅涉及bash

$ while read line; do printf "%s " "${line##*: }"; done < data; echo
10 80 
$ 

它逐行读取文件,line通过从左侧删除最大的匹配模式(在本例中:直到 的所有内容:)来破坏变量,并将其传递给printf,然后继续对其进行格式化。我echo在最后添加了 以获得最终的换行符 :)

相关内容