다음 형식의 데이터가 포함된 텍스트 파일이 있습니다.
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