我正在尝试从 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
处理最后一列(在本例中为10
和80
)。第二条命令使用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
在最后添加了 以获得最终的换行符 :)