Я пытаюсь извлечь шаблоны из файла cat в сценарии bash. Мне нужно извлечь 10 и 80 построчно. Как мне это сделать?

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

1 ответ1

4
$ 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 в конце, чтобы получить последний перевод строки :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .