2013-04-06 69 views
0

我有一個包含如下記錄的兩個文件:AWK命令從文件1更換第n個領域在第n行到file2

File1

1,2,3,a|x|z,4,5 

而且

File2

1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 
1,2,3,a|x|z,4,5 

這裏有6個域被分隔

如何更換第四個字段(即, a|x|z)在File2的第二,第三和第四行中,其中a,x和z分別來自File1

我真正的問題是,第四場不會是永遠a|x|z但它始終是|分離

我認爲產出將是如下。

File2

1,2,3,a|x|z,4,5 
1,2,3,a,4,5 
1,2,3,x,4,5 
1,2,3,z,4,5 
+0

你在這之前詢問過什麼? – FelipeAls 2013-04-06 21:38:25

+0

當您提到行號2,3,4時,我刪除了空行。如果需要它們,您可以回滾編輯。 – 2013-04-06 21:46:05

+0

沒問題。它的罰款,除非它很好理解 – kattashri 2013-04-06 21:53:54

回答

1
$ awk 'FNR==NR{split($4,f1,"|");next}FNR>1{$4=f1[FNR-1]}1' FS=, OFS=, file1 file2 
1,2,3,a|x|z,4,5 
1,2,3,a,4,5 
1,2,3,x,4,5 
1,2,3,z,4,5 

注意:這裏假設在file1即3該數字的子場的等於在file2再次3(線2,3被替換的行數,4)。如果不是這種情況,你應該描述如果說子字段的數量仍然是3,但是文件中的行數是10,應該發生什麼?

+0

非常感謝sudo :)我嘗試使用拆分功能,但它總是試圖取代整個領域。我想我需要更多地瞭解awk! – kattashri 2013-04-06 22:12:57

+0

沒問題,看看http://www.gnu.org/software/gawk/manual/gawk.pdf – 2013-04-06 22:19:07

+0

是的,這是我現在面臨的問題。它只適用於file1中的單個記錄,我試圖通過引用上面共享鏈接的文檔來記錄多個記錄。 – kattashri 2013-04-08 04:20:37