Беда с nawk и OFS в BASH - PullRequest
       31

Беда с nawk и OFS в BASH

1 голос
/ 07 мая 2011

Я работаю над сценарием для извлечения номера набора процессоров, за которым следуют идентификаторы процессоров, которые попадают под этот набор процессоров в Solaris в оболочке bash:

Вот вывод, из которого я хочу извлечь: (содержимое $ output)

user processor set 1: processors 0 1
user processor set 2: processors 2 8 9
user processor set 3: processors 3 4 5 6 7

Желаемый вывод:

1: 0 1
2: 2 8 9
3: 3 4 5 6 7

Код, который я написал, используя nawk:

print $output | nawk '                                 
BEGIN { ORS="\n" ; OFS = " " }
{
print$4; print OFS
for (i=6;i<=NF;i++)
print $i
}'

полученный вывод:

1: 
0 
1
2: 
2 
8 
9
3:  
3 
4 
5 
6 
7

Может кто-нибудь помочь и сообщить мне, чего мне не хватает в получении желаемого результата. Заранее спасибо.

РЕДАКТИРОВАТЬ: Идея использовать OFS и ORS получены из этого учебника: ссылка на учебник

Ответы [ 2 ]

1 голос
/ 07 мая 2011

Попробуйте это

print $output | nawk '                                 
BEGIN { ORS="\n" ; OFS = " " }
{
outrec = ""
for (i=6;i<=NF;i++)
    outrec = outrec " " $i
    print $4 " " outrec
}'
1 голос
/ 07 мая 2011

ORS по умолчанию уже установлено на "\n".Так как вы хотите использовать несколько операторов печати, вам нужно установить для нее пустую строку, поскольку после любого оператора печати есть неявное значение print ORS.

print $output | awk '
    BEGIN { ORS=""; }
    {
        print $4;
        for (i=6;i<=NF;i++)
            print " " $i;
        print "\n";
    }'

Вы также можете сделать это с помощью cut:

print $output | cut -d ' ' -f 4,6-
...