2014-01-13 71 views
0

我有一個CSV文件,如下所示:拆分使用AWK一個CSV文件,同時從不同的文件中讀取命名輸出文件

group1, item1 
group1, item2 
group2, item3 
group1, item4 
..... 

我已成功地按組單獨的CSV文件,這個文件分割(group1.csv.dat,group2.csv.dat等)。每個文件都包含屬於特定組的所有項目。

group1.csv.dat:

item1, true 
item2, true 
item4, true 
..... 

group2.csv.dat:

item3, true 
..... 

我已經使用了以下AWK:

awk -F, '{print $2",true" > $1".csv.dat"}' file1 

現在,我有一個第二文件(比方說文件2),如下所示:

group1, GRFS+NC, 4 
group2, GRTU+NC, 6 
.... 

如何使用AWK讀取此文件,以便將在第一步中創建的文件命名爲 GRFS4.csv.dat,GRTU6.csv.dat而不是group1.csv.dat,group2.csv.dat?我希望將處理納入第一步。非常感謝......

回答

1
awk -F, '{split($2,a,"+");print $2",true" > a[1]""$3".csv.dat"}' file2 
+0

請注意,文件名中會出現尾隨空格。 – fedorqui

+0

謝謝你的回答。這將僅基於來自file2的信息生成文件。我想要做的事情基本上是重命名AWK在我的問題中產生的文件(例如,將group1.csv.dat,在file2中查找「group1」,並將group1.csv.dat重命名爲GRFS4.csv.dat,方法是將相關領域)。 –

+0

正如前面多次討論的那樣,輸出重定向右側的未加括號的串聯會產生未定義的行爲。你需要在它周圍放上括號。而且,'a [1]'和'$ 3'之間的空字符串('「」')完全沒有作用。 –

0

你需要這樣的事情,未經測試:

awk ' 
NR==FNR{ name[$1] = $3 $6 ".csv.dat"; next } 
{ print $2 ",true" > name[$1] } 
' FS='[, +]' file2 FS=',' file1 

只是算領域的文件2,以確保$ 24和$ 6正確的字段。添加一個調試循環來打印它們,看看你是否不確定。

相關問題