2013-11-25 1 views
1

Я новичок в AWK и пытается писать код, который может объединить 2 файла ..awk | Не в состоянии объединить 2 файла

File1

session=123;1,code=01,name=om 
session=345;3,code=04,name=ra 

file2

time=44,minute=22,sec=01,session=123;1,creation=89 
time=34,minute=12,sec=023,session=523;1,creation=80 

Выход должен быть

time=44,minute=22,sec=01,session=123;1,creation=89,code=01,name=om 
time=34,minute=12,sec=023,session=523;1,creation=80,, 

Я написал что-то вроде:

BEGIN { FS = OFS = "," } 
FNR == NR { 
    a[$2] = substr($0,index($0,$2)); 
    next 
} 
{ 
    if($4 in a)print $0","a[$2]; 
    else print $0",,"; 
} 

Но это не дает правильного выхода.

Не могли бы вы помочь, если я ошибся?

+0

Почему остальные линии 'file1' не входит в ожидаемый выход? Действительно ли должны быть несколько значений 'session' в одной строке в' file1'? – Barmar

+0

Потому что file2 является базовым файлом .. если что-то лишнее в файле1, то это можно игнорировать .. но мне нужно все, что из файла2. –

+0

Мой вопрос вызван неправильным форматированием 'file1' перед редактированием. – Barmar

ответ

2

index($0, $2) не хороший способ, чтобы получить все после поля 2. В первой строке file1, $2 является "1", так index($0, "1") находит 1 в section=123.

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

BEGIN { FS = OFS = "," } 
FNR == NR { 
    session=$1; 
    $1 = ""; 
    a[session] = $0; 
    next 
} 
{ 
    if($4 in a)print $0","a[$4]; 
    else print $0",,"; 
} 
+0

Спасибо .. но почему substr ($ 0, index ($ 0, $ 2)) не работает .. В этом примере у меня есть только 3 и 4 поля .. может быть n количество полей .. то substr лучше .. правильно? или предложите свои взгляды –

+0

Я все еще не получаю выход слияния. # awk -f field_merge_2_1.awk file1.log file2.log time = 44, minute = 22, sec = 01, session = 123; 1, creation = 89 ,, time = 34, minute = 12, sec = 023, session = 523; 1, creation = 80 ,, –

+0

Когда '$ 22'' '' '' 'index ($ 0, $ 2)' - это позиция первого '1' в строке, а не в поле поля. – Barmar