2016-02-10 104 views
0

我有兩個CSV文件。一個是字典,另一個是我想修改的文件。這本字典有3列:AWK解析CSV值

DEPT_CODE,DEPT,DEPT_NAME 
500,Billing,Billing Department 
300,Accounting,Accounting Department 
... 

輸入文件有7列:

TF,DOC,SECTION,XOFFSET,HEADING,YOFFSET,DEPT_CODE 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,500 
FALSE,BINDER,Body Section,23456,Heading 2,66425,300 
... 

我想用AWK與字典文件時的第2列替換輸入文件的第7列輸入文件的第7列與字典文件的第1列匹配。

例如:

TRUE,JOURNAL,Header Section,12345,Heading 1,55152,Billing 
FALSE,BINDER,Body Section,23456,Heading 2,66425,Accounting 
... 

我使用以下命令,沒有得到任何結果。我究竟做錯了什麼?

awk -F',|, ' 'NR==FNR{a[$1]=$2} NR>FNR{$7=a[$7];print}' OFS=',' "$dictionary.csv" "$input.csv" 
+0

我用過|我的問題背景中的分隔符,但是我的真實數據是分隔符。 – didjit

+0

字典文件是否有多行? – dawg

+0

是的,許多行 – didjit

回答

0

Phew!

一個頭鑑於你的數據。例如:

$ cat /tmp/f1.txt 
DEPT_CODE,DEPT,DEPT_NAME 
500,Billing,Billing Department 
300,Accounting,Accounting Department 
$ cat /tmp/f2.txt 
TF,DOC,SECTION,XOFFSET,HEADING,YOFFSET,DEPT_CODE 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,500 
FALSE,BINDER,Body Section,23456,Heading 2,66425,300 

你可以這樣做:

$ awk -F, 'BEGIN{OFS=FS} FNR<2 {next} FNR==NR{a[$1]=$2; next} {$7=a[$7]; print}' /tmp/f1.txt /tmp/f2.txt 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,Billing 
FALSE,BINDER,Body Section,23456,Heading 2,66425,Accounting 
+0

這裏真的沒有欺騙。基本上需要查看第7列的價值。 – didjit

+0

當我運行這些,我只是得到︰Column1,Column2,Column3,Column4,Column5,Column6, – didjit

+1

@didjit沒有人認爲你試圖欺騙我們,但MAYBE有你的專欄1-> 6的東西到解決方案,但你沒有認識到這一點很重要。這就是爲什麼重要的是要發佈一些真正具有代表性的數據,而不是僅僅在所有行的所有字段上填寫一些單詞空格填充符。這個解決方案不適合你的事實表明,你可能還沒有向我們展示真實數據。 –

0

awk來救援!

$ awk -F, -v OFS=, 'NR==FNR{a[$1]=$2;next} $7=a[$7]' dict file 

Column1,Column2,Column3,Column4,Column5,Column6,Billing 
Column1,Column2,Column3,Column4,Column5,Column6,Accounting