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

관련 정보