Columns

如何分隔不同行中的第一列內容

  • June 8, 2017

我的輸入數據有 5 列,由選項卡分隔:

Class1,Class2 info1 info2 info3 info4
Class3 info1a info2a info3a info4a
Class4,Class5 info1b info2b1,info2b2 info3b info4b

當我在第一列中有用逗號分隔的數據時,我想將其用來自第 2-5 列的具有相同資訊的不同行分隔,例如:

Class1 info1 info2 info3 info4
Class2 info1 info2 info3 info4
Class3 info1a info2a info3a info4a
Class4 info1b info2b1,info2b2 info3b info4b
Class5 info1b info2b1,info2b2 info3b info4b

我不知道該怎麼做。有什麼建議嗎?

awk解決方案:

awk '$1~/.+,.+/{ split($1,a,","); $1=""; sub(/^ */,"",$0); 
    for(i=1;i<=length(a);i++) print a[i],$0; next }1' file

輸出:

Class1 info1 info2 info3 info4
Class2 info1 info2 info3 info4
Class3 info1a info2a info3a info4a
Class4 info1b info2b1,info2b2 info3b info4b
Class5 info1b info2b1,info2b2 info3b info4b

  • $1~/.+,.+/- 如果第一列包含逗號分隔的項目,則處理行
  • split($1,a,",")- 將第一列拆分為項目數組
perl -F'\t' -lane '$,="\t";
  print $_, @F for split /,/, splice @F, 0, 1;
' yourfile

結果

Class1  info1   info2   info3   info4
Class2  info1   info2   info3   info4
Class3  info1a  info2a  info3a  info4a
Class4  info1b  info2b1,info2b2 info3b  info4b
Class5  info1b  info2b1,info2b2 info3b  info4b

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