2016-06-07 95 views
-1

我有兩個csv文件比較兩個csv文件,並用awk附加新列

file1。 CSV例 - 第15欄 - 值 - 0812710304015這是塔10 file2中

M|xxxxxxx|xxxxxx|xxxxxx|xxxxxxxxx|H-SYD-AUAUD-003658-00000013-160606221243|123466789123456|1806||8800|MC-TCSSGK-0812710304015 0000001#M|182137|||0812710304015|04080010194MORTIER/VINCENT MR Fee Transaction    0812710304015 QF TCSSGK       15022602300045          0000000088000000000000000000000000000009010200MC50TCSSGKMORTIER/VINCENT MR Fee TransaRIMGR +00000000800    xxx N150301B000000000000000000000000000000000000000000000000000000000000000000000000 
M|xxxxxx|xxxxx|xxxx|xxxxxx|H-SYD-AUAUD-003658-00000025-160606221243|xxxxxxxxx|1811||8800|MC-MKNUYE-0812710304016 0000002#M|104749|||0812710304016|04080010194WILLIAMS/JAY MR Fee Transaction     0812710304016 QF MKNUYE       15022602300045          0000000088000000000000000000000000000009010200MC50MKNUYEWILLIAMS/JAY MR Fee TransactiRIMGR +00000000800    QFAUAUDP1  N150301B000000000000000000000000000000000000000000000000000000000000000000000000 
M|xxxxxx|xxxxx|xxxx|xxxxxx|H-SYD-AUAUD-003658-00000025-160606221243|xxxxxxxxx|1811||8800|MC-MKNUYE-0812710304016 0000002#M|104749|||0812710304017|04080010194WILLIAMS/JAY MR Fee Transaction     0812710304016 QF MKNUYE       15022602300045          0000000088000000000000000000000000000009010200MC50MKNUYEWILLIAMS/JAY MR Fee TransactiRIMGR +00000000800    QFAUAUDP1  N150301B000000000000000000000000000000000000000000000000000000000000000000000000 

file2.csv例 - 第10欄 - 0812710304015

APPROVED||BATCH|BSP HOT|SYD||||QFAUAUDP1|0812710304015|MORTIER/VINCENT MR Fee Transa|TCSSGK|02300045|xxxxxxxxx|182137|0618|0;Successful;M;xxxxxxxxx|104749|1118|0;H-SYD-xxxx-003658-0000|MC||| 
APPROVED||BATCH|BSP HOT|SYD||||QFAUAUDP1|0812710304016|WILLIAMS/JAY MR Fee Transacti|MKNUYE|02300045|xxxxxxxxx|104749|1118|0;Sucessful;M;xxxxxxxxx|104749|1118|0;H-SYD-xxxx-003658-0000|MC||| 

輸出預期

如果找到記錄

file1 all | file2 1 st column 

如果沒有找到記錄

file1 all columns | record not found 

批准是在file2.csv文件中的第一列

到目前爲止我的代碼是

/usr/xpg4/bin/awk 

BEGIN {FS = OFS= "|"} 

    NR == FNR { 

     A[$2] = $0; 
     print "value of a[$10]="A[$2]; 
     b[$1] = $1; 
     print "value of b[$1]="b[$1]; 
     next 
    } 

    { 
     print "I am still in first loop"; 
     print $15; 
     if ($15 in A){ ---------> here i am not able to verify value of A . value is null 
     print $15; 
     } 
     else { 
       print "Iam here "; 
       print "vaslue of a[$1]=" A[$1]; -- > the value is A is null 
       print "value of $10 = " $10; 
       print $0; 
    } 
    } 
    file2.csv file1.csv 

回答

0
#!/bin/ksh 
set -x 
/usr/xpg4/bin/awk 'BEGIN{FS=OFS="|"} FNR==NR{a[$2]=$1 ;b[$10]=$10;print "value of $10 " $10;next;} 
{ 
if($15 in b){ 
print $0,a[$17]; 
} 
else 
{print $0,"record not found";}}' ./file1.csv ./file2.csv 

以上爲我工作。

0

可以使用的東西有點短:

​​

也就是說,循環遍歷第二個文件,並使用倒數第二個字段作爲關鍵字和第一個作爲值來存儲數據。

然後,遍歷第一個文件並將最後一個字段設置爲存儲值或字符串「Record not found」。

與您的數據:

$ awk 'BEGIN{FS=OFS="|"} FNR==NR {data[$(NF-1)]=$1; next} {$NF=$(NF-1) in data ? data[$(NF-1)] : "Record not found"}1' f2 f1 
G||london|0812710304015|Declined 
G||malsyia|0812710304017|Record not found 
G||malsyia|0812710304016|APPROVED 
+0

謝謝fedorqui。它只在未找到記錄時才起作用,但當兩個文件中都有記錄時,它不會使用file2第一列(即Approved或Declined)中的值更新最後一列。你能幫我怎麼做到這一點 –

+0

@AbrarAhamed定義「其不更新」。你的意思是更新原始文件?對於您的給定輸入,它會生成所需的輸出。 – fedorqui

+0

我的意思是輸出只對file2中不存在的記錄正確。對於存在的記錄,最後一列沒有得到與file2第一列更新 –