구분 기호 사이의 추가 공백, 탭 및 새 줄 바꾸기

구분 기호 사이의 추가 공백, 탭 및 새 줄 바꾸기

데이터 출력 파일에는 개행으로 구분된 여러 줄의 레코드가 있습니다. 각 행에서 열은 구분 기호로 구분됩니다 |.

구분 기호 사이의 각 열에 있는 추가 공백, 탭, 줄 바꿈을 모두 바꿔보세요. 각 데이터 줄은 "&*"로 끝납니다.

데이터:

char1   |  char2 |
        char3|char  4 &*
char11
       |  char   12 |char13|char14 &*
char21           |  char22 |char23|  char24 &*

역할:

  • 그런 다음 후행 공백/탭을 제거해야 합니다.
  • 줄이 다음으로 시작/끝나는 경우 줄을 연결하세요.|
  • 반복되는 공백을 압축합니다.
  • "&*" 뒤의 새 줄 건너뛰기

결과:

char1|char2|char3|char 4
char11|char 12|char13|char14
char21|char 22|char23|char24

내가 지금 가지고 있는 코드는 탭을 교체하기 위한 것입니다. 새 줄과 추가 공간을 갖도록 이를 변경해야 합니다.

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt

답변1

GNU를 사용하면 sed:

sed -E '
    :a /\s*&\*\s*$/ !{ N; s/\n//; ta; };
    # read "N"ext line and join (s/\n//) except "!" lines that ends with "&*" chars;
    s/&\*//g;
    # also remove these chars "&*" too 
    s/\s*\|\s*/|/g;
    # remove whitespaces around "|" char as well
' <(tr -s '\t ' ' ' <infile)

아래의 주석 없는 명령:

sed -E '
    :a /\s*&\*\s*$/ !{ N; s/\n//; ta; }; 
    s/&\*//g;       
    s/\s*\|\s*/|/g;
' <(tr -s '\t ' ' ' <infile)

관련 정보