Как напечатать определенные столбцы из файла, используя bash? - PullRequest
0 голосов
/ 11 октября 2019

У меня есть файл, контекст которого выглядит следующим образом:

               CA Services Status Report

           Component Name               Pid        Status
------------------------------------  -------  --------------
WAAE Web Server (ASD)                   20841  running
WAAE Application Server (ASD)           20281  running
WAAE Scheduler (ASD)                    20486  running
WAAE Agent (WA_AGENT)                   20109  running
CA-wcc-services Server                  22385  running
CA-wcc Server                           24410  running

И я хотел печатать только Pids на экране.

Я пытался использовать awk и grep, но не смог напечатать Pids.

cat test | awk '{print $5}'

Я хочу напечатать только столбец Pid, ​​но не могу напечатать его точно.

Ответы [ 4 ]

5 голосов
/ 11 октября 2019

Не могли бы вы попробовать следующее (протестировано с предоставленными образцами).

awk 'NF && !/Report/ && !/Status/ && !/^-/{print $(NF-1)}' Input_file

ИЛИ (согласно комментарию Джеймса сэра):

awk 'NF&&$(NF-1)~/[0-9]+/{print $(NF-1)}' Input_file
2 голосов
/ 11 октября 2019

Если у вас есть только цифры в поле pid, извлеките цифры:

$ awk 'match($0,/[0-9]+/){print substr($0,RSTART,RLENGTH)}' file
20841
20281
...

Или используйте более одного пробела в качестве разделителя полей после записи 4:

$ awk -F"  +" 'NR>=5{print $2}' file
20841
20281
...
1 голос
/ 11 октября 2019

Поскольку у вас, кажется, есть фиксированный макет, просто измерьте, где все:

<file tail +5 a.txt | cut -c41-45

Начните с 5-й строки, используйте только символы от 41-го до 45-го столбца. То же самое с AWK (хотя я нахожу выше интуитивно понятным):

awk 'NR>=5 { print substr($0, 41, 5) }' file
1 голос
/ 11 октября 2019

Вы можете использовать это awk при условии, что файл содержит только пробелы, и цифры могут появляться в любом месте строки:

awk '!n && n=index($0, " Pid "){++n} n{s=substr($0, n); sub(/ .*/, "", s); print s}' file

Pid
-----
20841
20281
20486
20109
22385
24410
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...