Я пытаюсь извлечь шаблоны из файла cat в сценарии bash. Мне нужно извлечь 10 и 80 построчно. Как мне это сделать?
Total Branch Predictor Mispredictions: 10
Total Branch Predictor OK predictions: 80
$ 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
в конце, чтобы получить последний перевод строки :)