sed を使用したテーブルの行の結合

sed を使用したテーブルの行の結合

クエリには次の表がありますが、+区切り文字は、次の例に示すように、「説明」の下に新しい行を作成することです。


TYPE+DESCRIPTION+PRIORITY+DATE
1+text1+HIGH+Aug 15
+text2  
2+text+LOW+Aug 11
3+text+LOW+Aug 11
4+text1+HIGH+Aug 15
+text2  
+text3

sedを使用して次のように見えるようにするにはどうすればよいですか?

TYPE    DESCRIPTION      PRIORITY DATE
1       text1 text2      HIGH     Aug 15
2       text             LOW      Aug 11
3       text             LOW      Aug 11
4       text text2 text3 HIGH     Aug 15

私は試した:

sed -n '1{h;n};/^ *+ */{s// /;H;n};{x;s/\n//g;p};${x;p}' 

しかし、エラーが発生しました(sed:コマンドが壊れています)。ありがとうございます。

ベストアンサー1

awk '
    BEGIN{OFS=FS="+"}
    {sub(/[[:blank:]]+$/,"")}  #Removes trailing blanks
    NF==4{print line;line=$0}
    NF==2{x=$2;$0=line;$2=$2" "x;line=$0}
    END{print line}
' file | column -ts "+"

その背後にある主なアイデアは、ifが前の行のNF==22番目のフィールド$2に2番目のフィールドを置くことです。それで何が起こりますか?

1+text1+HIGH+Aug 15 #Puts this in "line" variable
+text2              #Transfer 2nd field to "line" second field
# Resulting in...
1+text1 text2+High+Aug 15

column+この微細な最終出力を生成するために出力から削除されました。

TYPE  DESCRIPTION        PRIORITY  DATE
1     text1 text2        HIGH      Aug 15
2     text               LOW       Aug 11
3     text               LOW       Aug 11
4     text1 text2 text3  HIGH      Aug 15

おすすめ記事