이전 줄에 "|"를 포함하지 않는 줄을 추가합니다.

이전 줄에 "|"를 포함하지 않는 줄을 추가합니다.

다음 형식의 데이터가 포함된 텍스트 파일이 있습니다.

1|0|this is test file line1
2|1|this is test file line2
3|1|this
is
test
file line4

포함하지 않는 줄은 포함 |하는 이전 줄에 추가되어야 합니다.|

산출:

1|0|this is test file line1
2|1|this is test file line2
3|1|this is test file line4

답변1

한 가지 방법은 awk를 사용하여 다음 알고리즘을 구현하는 것입니다.

  • 이전 줄 추적prev
  • 행에 가 포함되어 있고 |첫 번째 행이 아닌 경우 인쇄하십시오 prev. 그 후 현재 행을prev
  • 줄에 포함되어 있지 않으면 |다음에 추가하십시오.prev
  • 스크립트 끝에서 인쇄prev

예를 들어:

awk '/\|/ { if (NR > 1) print prev; prev=$0 }
     !/\|/ { prev = prev $0 }
     END { print prev }' input

답변2

필드 구분자 로 사용됩니다 |. 행에 a가 포함되어 있으면 |NF변수는 1보다 큽니다.

awk -F'|' 'NR > 1 && NF > 1 {print ""} {printf "%s", $0} END {print ""}' file

답변3

awk '/\|/ { if (printed==1) print ""; else printed=1;
    printf "%s",$0; next; }; { printf " %s",$0 }; END { print ""; }' inputfile

또는 선행 개행에 신경 쓰지 않는다면 더 짧습니다.

awk '/\|/ { printf "\n%s",$0; next; }; { printf " %s",$0 }; END { print ""; }' inputfile

답변4

awk도 있습니다:

awk -F'|' 'NR>1{printf prev (NF>1?"\n":" ")}{prev=$0}END{print prev}' file

시험

$ cat file1
1|1|this is test file line1
2|2|this is test file line2
3|3|this
is
test
file line3
4|4|this is test file line4
5|5|this is
test file
line5
6|6|this is test file line6

$ awk -F'|' 'NR>1{printf prev (NF>1?"\n":" ")}{prev=$0}END{print prev}' file1
1|1|this is test file line1
2|2|this is test file line2
3|3|this is test file line3
4|4|this is test file line4
5|5|this is test file line5
6|6|this is test file line6 

관련 정보