2013-09-28 30 views
1

我有一個小小的數據操縱問題,這肯定可以通過使用awkbash來解決。awk/bash:反覆添加列到文件

我有兩個現有的數據文件。 第一個由以n個塊排列的製表符分隔的字段組成。每個塊由一條空白行分隔。

1 3 
2 4 
3 5 

4 6 
5 7 
6 8 

第二個文件只有一列數據與第一個文件中的每個塊一樣長。

a 
b 
c 

我的問題是,我必須在文件中的兩個數據列追加到每塊在文件中的一個,使得輸出將如下所示:

1 3 a 
2 4 b 
3 5 c 

4 6 a 
5 7 b 
6 8 c 

你有什麼想法?我已經嘗試在一個新文件中將文件的兩個數據(塊的數量)寫入一個新文件,並附加awk,但我沒有得到正確的工作。

回答

1

保存第二文件的每一行中的陣列和使用模塊運算符(%)到週期約其爲第一個文件的每一行與數據內容:

awk ' 
    BEGIN { FS = OFS = "\t" } 
    FNR == NR { data[ NR - 1 ] = $0; next } 
    ! $0 { print; next } 
    { ++i; print $0, data[ (i - 1) % 3 ] } 
' file2 file1 

它產生:

1 3 a 
2 4 b 
3 5 c 

4 6 a 
5 7 b 
6 8 c 
0

假設你有兩個文件,a.datb.dat,你可以這樣做

cat -n a.dat > aa.dat 
cat -n b.dat > bb.dat 
join aa.dat bb.dat | awk '{$1=""}1' > c.dat 
rm aa.dat bb.dat 

您的結果保存在c.datawk '{$1=""}1'刪除行號的第一列。

+0

這不會解決OP的問題。 –

2

這個簡單的,動態的襯墊將這樣的伎倆:

awk 'NR==FNR{a[i++]=$0;next}{print (NF?$0 OFS a[j++%i]:$0)}' OFS='\t' file2 file1 
1 3 a 
2 4 b 
3 5 c 

4 6 a 
5 7 b 
6 8 c