Command-Line

處理不同列中逗號分隔值的表

  • October 14, 2015

我正在嘗試執行以下操作一段時間但沒有成功。

我收到的數據在每個單獨的列中都有逗號分隔值。第 6 列中逗號之前的第一個值始終與第 7 列中逗號之前的第一個值相關。我想提取數據並將它們按正確的順序放入表中,如下所示:

輸入數據:

1 2 3 4 5 A1,A2 B1,B2
1 7 3 3 5 C1,C2,C3 D1,D2,D3
1 2 R 4 b E1,E2,E3,E4 G1,G2,G3,G4

輸出數據:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1 
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4

我知道我需要\t在將它們放入排序數組之前將它們拆分,但我對此完全陌生,並且收到瞭如此龐大的數據。

awk

awk '{split($6,a,","); split($7,b,","); for(i in a){print $1,$2,$3,$4,$5,a[i],b[i]}}' file
  • awk讀取輸入空格或製表符分隔,預設值:[\t ]+.

  • split($6,a,",")拆分$6以逗號分隔的第 6 個欄位,並將輸出儲存在名為a.

  • split($7,b,",")拆分$7以逗號分隔的第 7 個欄位,並將輸出儲存在名為b.

  • for(i in a)現在循環遍歷a數組…

    • print ...,a[i],b[i]…並將值列印$1$5兩個數組值a[i]及其b[i]索引i

輸出:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4

引用自:https://unix.stackexchange.com/questions/235727