2017-03-09 97 views
0

我有兩個文件,如下兩個管道分隔的文件合併成一個文件| F2 | C3 | D3 | E3
A4 | F2 | 4 | D4 | E4
A5 | F4 | C5 | D5 | E5合併基於某些條件

文件2:
Z1 | F1 | C1 | D1 | E1
Z2 | f1 | c2 | d2 | e2
z3 | f2 | c3 | d3 | e3
Z4 | F2 | 4 | D4 | E4
Z5 | F3 | C5 | D5 | E5

輸出文件應該從兩個這樣的行按照第二個字段排序文件交錯的線條。
輸出文件:
A1 | F1 | C1 | D1 | E1
A2 | F1 | C2 | D2 | E2
Z1 | F1 | C1 | D1 | E1
Z2 | F1 | C2 | D2 | E2
A3 | F2 | C3 | D3 | E3
A4 | F2 | 4 | D4 | E4
Z3 | F2 | C3 | D3 | E3
Z4 | F2 | 4 | D4 | E4
Z5 | F3 | C5 | d5 | e5
a5 | f4 | c5 | d5 | e5

我嘗試將File2附加到File1,然後如此rt在第二場。但它不會維護源文件中的訂單。

回答

0
file_1: 
a1|f1|c1|d1|e1 
a2|f1|c2|d2|e2 
a3|f2|c3|d3|e3 
a4|f2|c4|d4|e4 
a5|f4|c5|d5|e5 

file_2: 
z1|f1|c1|d1|e1 
z2|f1|c2|d2|e2 
z3|f2|c3|d3|e3 
z4|f2|c4|d4|e4 
z5|f3|c5|d5|e5 


awk -F"|" '{a[$2] = a[$2]"\n"$0;} END {for (var in a) print a[var]}' file_1 file_2 | sed '/^\s*$/d' 
  • AWK

    -F : tokenize the data on '|' character. 
    a[$2] : creates an hash table whose key is string identified by $2 and 
         value is previous data at a[$2] + current complete line ($0) separated by newline. 
    
  • sed的

    used to remove the empty lines from the output. 
    
    
    Output: 
    a1|f1|c1|d1|e1 
    a2|f1|c2|d2|e2 
    z1|f1|c1|d1|e1 
    z2|f1|c2|d2|e2 
    a3|f2|c3|d3|e3 
    a4|f2|c4|d4|e4 
    z3|f2|c3|d3|e3 
    z4|f2|c4|d4|e4 
    z5|f3|c5|d5|e5 
    a5|f4|c5|d5|e5 
    
+0

謝謝,@sameerkn。我得到了所需的合併文件,但它沒有按字母順序排序,基於第二個字段。 –

+0

@BalkrushnaChaudhary:通過添加示例來編輯答案。 – sameerkn