2

У нас есть такой файл (с большим количеством строк):

BeginJobID = S0065546 JESMSGLG(1/281) jname = CICWCMWD queue = ИСПОЛНЕНИЕ JESMSGLG(2/281) BeginJobID = S0065568 jname = CICWWUWD очередь = ИСПОЛНЕНИЕ JESMSGLG(3/281) JUEGEDSWG6 = SICWW = JICSWE6 = SICWW = SICW6 = SICWW = SICWW = SICWW = SICWW = SICWW = SICWW = 600W ) jname = очередь CICWTQ11 = ИСПОЛНЕНИЕ BeginJobID = S0065599 BeginJobID = S0065600 очередь JESMSGLG(5/281) = ИСПОЛНЕНИЕ = Очередь S0065602 = ИСПОЛНЕНИЕ BeginJobID = S0065603 JESMSGLG(8/281) jname = очередь CICWFY21 = ИСПОЛНЕНИЕ BeginJobID = S0065604 JESMSGLG(9/281) jname = CICWFQ11 очередь = ИСПОЛНЕНИЕ JESMSGLG(11/281) jname = очередь CICWFT21 = ИСПОЛНЕНИЕ BeginJobID = S0065606 JESMSGLG(12/281) jname = очередь CICWFT31 = ИСПОЛНЕНИЕ BeginJobID = S0065607 JESMSGLG(13/281) jname = SICJ60G SEGWG60660 SJWG660SJGWG SJWG606 14/281) jname = очередь CICWGA11 = EXECUTION BeginJobID = S0065612 JESMSGLG(15/281) jname = очередь CICWGA21 = ИСПОЛНЕНИЯ JESMSGLG(16/281) BeginJobID = S0065613 jname = CICWGQ11 очереди = ИСПОЛНЕНИЯ BeginJobID = S0065614 JESMSGLG(17/281) очереди = ИСПОЛНЕНИЯ jname = CICWGY11 BeginJobID = S0065615 JESMSGLG(18/281) jname = CICWGT21 очереди = ИСПОЛНЕНИЯ BeginJobID = S0065616 JESMSGLG(19/281) jname = CICWTT41 очередь = ИСПОЛНЕНИЕ JESMSGLG(20/281) BeginJobID = S0065617 jname = CICWGT11 очередь = ИСПОЛНЕНИЕ

Я хотел бы знать простую команду awk, чтобы сделать 2 таких отчета:

  1. выполнение: awk_simple_command_(jname=) результат:
CICWCMWD
CICWWUWD
CICWMCWD
CICWTQ11
CICWFA11
CICWFA21
CICWFY11
CICWFY21
CICWFQ11
CICWFT11
CICWFT21
CICWFT31
CICWFT41
CICWGA11
CICWGA21
CICWGQ11
CICWGY11
CICWGT21
CICWTT41
CICWGT11
  1. выполнение: awk_simple_command_(BeginJobID=) результат:
S0065546
S0065568
S0065569
S0065599
S0065600
S0065601
S0065602
S0065603
S0065604
S0065605
S0065606
S0065607
S0065608
S0065609
S0065612
S0065613
S0065614
S0065615
S0065616
S0065617

2 ответа2

1

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

reports.awk

BEGIN {
  /* Split records on the space character */
  RS=" ";
  /* Within each record, split the components (fields) on the '=' character */
  FS="=";
}
/* When the first field is the one requested (colname), 
   print the second field. */
$1 == colname { print $2; }

Затем, если ваш файл данных называется « data », вы можете запустить программу следующим образом:

$ awk -f reports.awk colname = jname data

Конечно, используя colname = jname или colname = BeginJobID в зависимости от того, какие данные вы хотите извлечь. Это должно дать желаемый результат.

Если ваш файл данных иногда использует новую строку вместо пробела, вам нужно сначала преобразовать их в пробелы и передать результат в awk:

$ cat данные | tr "\n" "" | awk -f reports.awk colname = BeginJobID -

И вы, безусловно, можете вставить эту команду в сценарий оболочки, если будете часто ее использовать.

0

Вы также можете рассмотреть возможность использования grep:

grep -o 'jname=[^ ]\+' infile | grep -o '[^=]\+$'

А также:

grep -o 'BeginJobId=[^ ]\+' infile | grep -o '[^=]\+$'

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