이상한 인쇄 조건

이상한 인쇄 조건

다음과 같은 조건으로 라인을 인쇄해 보십시오.

입력 예

Hello:world
Hello:worlds:
Hello:world:example

노력 중 -

awk -F":" print $1 " + " $2 && if($3 != "") { " + " $3 }

따라서 예상되는 출력은 다음과 같습니다.

Hello + world
Hello + worlds
Hello + world + example

답변1

빈 공간에만 신경쓰면 되는 경우마지막필드를 사용하는 경우 sed다음을 사용하는 것이 더 짧습니다.

$ sed 's/:$//; s/:/ + /g' file
Hello + world
Hello + worlds
Hello + world + example

시도한 명령은 awk다음과 같이 저장할 수 있습니다.

$ awk -F":" '{ print $1 " + " $2 ($3 != "" ? " + " $3 : "") }' file
Hello + world
Hello + worlds
Hello + world + example

OFS또는 (출력 필드 구분 기호)를 사용하여 다음을 수행합니다 .

$ awk -F":" -v OFS=' + ' '{ print $1, $2 ($3 != "" ? OFS $3 : "") }' file
Hello + world
Hello + worlds
Hello + world + example

또한 부정적인 테스트를 제거하십시오:

$ awk -F":" -v OFS=' + ' '{ print $1, $2 ($3 == "" ? "" : OFS $3 ) }' file
Hello + world
Hello + worlds
Hello + world + example

답변2

마지막 열이 비어 있으면 출력에서 ​​마지막 열을 제거합니다. $1=$1awk가 OFS(출력 필드 구분 기호)를 사용하여 행을 다시 생성하도록 강제합니다.

awk '$NF=="" {NF--} {$1=$1}1' FS=':' OFS=' + ' file

산출:

안녕하세요+세상
안녕하세요+세상
안녕하세요+세계+예제

바라보다:8개의 강력한 awk 내장 변수 – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

관련 정보