2016-03-27 18 views
0

2 metin dosyam var. "A.txt"1 txt dosyasından diğerine değer eklerken boşluk ile awk kaldırılıyor?

A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column) 
A 2 BC ... -2 3 8 9.2 
A 3 WE ... 2 3 8 5.2 
A 4 RT ... 23 2 24 4.1 
... 
END 

"B.txt" nihai 2 sütun "a.txt" bu farklılıklar haricinde benzerdir içerir. Başka bir fark, "B.txt" in "A.txt" de olmayan bazı ek satırlar içermesidir. Örneğin, üçüncü hat A 3 QEW ... 5 23 34 5 "B.txt" in değil,

A 1 AB ... 1 5 4 9 
A 2 BC ... -2 3 1 0 
A 3 QEW ... 5 23 34 5 
A 4 WE ... 2 3 -7 56 
A 5 RT ... 23 2 -5 14 
... 
END 

Ne yapmak istiyorum a.txt" her satırında geçen sütunun değerini ayıklamak olduğunu "a.txt" olduğunu "ve" B.txt "deki ilgili satıra ekleyin. Ve "A.txt" içinde olmayan "B.txt" deki her satır için, üçüncü sütun öğesi "Q" harfi ile başlıyorsa (örneğin, QEW) ve diğer 2 değerinin değeri 1 değerini eklemek istiyorum. . Yani çıkış eserlerin altına

A 1 AB ... 1 5 4 9 4.5 
A 2 BC ... -2 3 1 0 9.2 
A 3 QEW ... 5 23 34 5 1 
A 4 WE ... 2 3 -7 56 5.2 
A 5 RT ... 23 2 -5 14 4.1 
... 
END 

gibi awk komutları görünmelidir:

NR==FNR{ 
    arr[$3] = $11 
    next 
} 
{ 
    if ($3 in arr){ 
     print($0, arr[$3]) 
    }else if ($3 == "^Q"){ 
     print($0, "2") 
    }else{ 
     print($0, "1") 
    } 
} 

Ran tek sorun olsun çıkış

A 1 AB ... 1 5 4 9 
4.5 
A 2 BC ... -2 3 1 0 
9.2 
A 3 QEW ... 5 23 34 5 
1 
A 4 WE ... 2 3 -7 56 
5.2 
A 5 RT ... 23 2 -5 14 
4.1 
... 
END 
olmasıdır

awk -f script.awk f1 f2 

ile

yanlıştır, çünkü son sütundaki değerler yeni satırlara girilmelidir. Bunu nasıl düzeltebilirim? Listelediğim yerine kullanabileceğim başka bir komut var mı?

cevap

0

Kodunuz ve Q için uymuyor Spec, neyse, burada daha deyimsel

$ awk 'NR==FNR{a[$3]=$NF; next} 
     $3 in a{print $0, a[$3]; next} 
       {print $0, ($3~/^Q/)?1:2}' f1 f2 

baskı genellikle bir fonksiyonu olarak yazılır çalışan bir komut dosyası, 1 alıntı gerek Ayrıca print $0,1 olduğunu ve 2.

+0

Bunu denediğimde hala orijinal soruda bahsettiğim yeni satır sorununu alıyorum – user5739619

+0

Tried dos2unix? – karakfa

İlgili konular