2012-01-11 2 views
0

У меня есть один входной файл, который приведен ниже.Как напечатать определенный столбец в строке с использованием unix?

Values,series,setupresultcode,nameofresultcode,resultcode 
2,9184200,,serviceSetupResultempty,2001 
11,9184200,0,successfulReleasedByService,2001 
194,9184200,1,successfulDisconnectedByCallingParty,2001 
101,9184200,2,successfulDisconnectByCalledParty,2001 
2,9184201,0,successfulReleasedByService,2001 
78,9184201,1,successfulDisconnectedByCallingParty,2001 
32,9184201,2,successfulDisconnectByCalledParty,2001 
4,9184202,0,successfulReleasedByService,2001 
63,9184202,1,successfulDisconnectedByCallingParty,2001 
37,9184202,2,successfulDisconnectByCalledParty,2001 

Я хочу, чтобы результат, как указано ниже:

Series,successfulReleasedByService,successfulDisconnectedByCallingParty,successfulDisconnectByCalledParty,serviceSetupResultempty 
9184200,11,194,101,2 
9184202,4,63,37, 

Держите серию как общее значение печати series.i.e. первый столбец по отношению к результату code.i.e третий (целочисленный) или четвертый (строковый) столбец во входном файле.

Например: второй столбец данных имеет n число рядов; возьмите 9184200. Эта серия имеет 4 setupresultcode (пустой, 0,1,2). Название каждого результирующего кода дается в 4-м столбце. Я хочу напечатать, если resultcode равен 0; то есть успешноеReleasedByService затем напечатать значение 11 относительно серии 9184200.

+1

извините, Я не понимаю логику трансформации. Не могли бы вы расширить и объяснить более подробно? – Benoit

+0

Я думаю, что @gyrous хочет превратить значения 'unique (setupresultcode)' в заголовки столбцов, 'unique (series)' в строки и перечислить в каждой строке строки столбца соответствующие 'Vales'. –

+0

извините, даже я смущен. :(Позвольте мне попытаться объяснить, например: второй столбец, имеющий n число серий, принимает 9184200. Эта серия имеет 4 setupresultcode (пустой, 0,1,2). Имя каждого результирующего кода дано в 4-м столбце. напечатайте, если resultcode равен 0.i.esuccessfulReleasedByService, а затем напечатайте значение 11 относительно серии 9184200. – gyrous

ответ

1

Нечто подобное может работать, хотя я его не тестировал, рассматривая его как своего рода псевдокод.

#!/bin/awk -f 
BEGIN 
{ 
    number_of_series=0; 
} 
{ 
    #This part will be executed for every line 
    if ($3 =="0" || $3 == "1" || $3 == "2") 
    { 
    for (i=1; i<=number_of_series; i++) 
    { 
     #If the series has already been added 
     if(seriesarray[i] == $2) 
     { 
     #Concat the results 
     seriesarray[$2]=seriesarray[$2]","$1; 
     } 
     #If it's a new series 
     else 
     { 
     number_of_series++; 
     seriesarray[$2]=$1; 
     } 
    } 
    } 
} 
END 
{ 
    #Iterate over the series and print the series id and the concatenated results 
    for (series in seriesarray) 
    { 
    print series, seriesarray[series]; 
    } 
} 

Это дало бы что-то вроде

9184200,11,194,101

9184201,2,78,32

9184202,4,63,37

+0

Hi kristof э-э, спасибо за сообщение. Может ли сказать мне что-то, как дать ввод? Я получаю ошибку, как это. – gyrous

+0

./test.sh >><<< /бен/nawk: выручая в исходной строке 3 – gyrous