Linuxで行ベースのデータを表形式で印刷する

Linuxで行ベースのデータを表形式で印刷する

私のファイルには次のデータがあります。

col1 col2 col3 subcol1 subcol2 subcol3
               subcol4 subcol5 subcol6
          col4 subcol7 subcol8 subcol9
               subcol10 subcol11 subcol2

データはスペースで区切られます。タブがない場合は、このデータを次のように変換したいと思います。

-------------------------------------------------------
col1  | col2 | col3  |   subcol1  | subcol2 | subcol13     
                       --------------------------------
      |      |       |   subcol4  | subcol5 | subcol6
              -----------------------------------------         
      |      | col4  |   subcol7  | subcol8 | subcol9     
                       --------------------------------
      |      |       |   subcol10 | subcol11| subcol12  
-------------------------------------------------------

どうすればいいですか?

編集済み

私は次のコマンドを試しました

sed -r -e 's/ {5}/\t/g' -e 's/ /\t/g' file.in | sed -e 's/\t/_|/g'|  column -t -s '_'

それは作り出す

col1  |col2 |col3  |subcol1  |subcol2  |subcol13     
      |     |      |subcol4  |subcol5  |subcol6
      |     |col4  |subcol7  |subcol8  |subcol9     
      |     |      |subcol10 |subcol11 |subcol12    

これを埋めるにはその行だけで済みます。

ベストアンサー1

私は次のawkスクリプトで終わりました。

awk '{gsub(/ {1,5}/,"\t|")}1' infile.txt | \
awk -F'|' 'NR>1{for(i=1;i<=NF;i++) if ($i=="\t") c++;
           printf("%*s",(c*8),"\t-");
           for (fill=1;fill<=length($0)+c;fill++)printf "-";
           printf("\n%s\n",$0);c=0;next} {print $0}'

出力は次のとおりです

col1    |col2   |col3   |subcol1        |subcol2        |subcol3
                        -----------------------------------     
        |       |       |subcol4        |subcol5        |subcol6
                --------------------------------------          
        |       |col4   |subcol7        |subcol8        |subcol9
                        -------------------------------------   
        |       |       |subcol10       |subcol11       |subcol2

おすすめ記事