다음과 같은 조건으로 라인을 인쇄해 보십시오.
입력 예
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=$1
awk가 OFS(출력 필드 구분 기호)를 사용하여 행을 다시 생성하도록 강제합니다.
awk '$NF=="" {NF--} {$1=$1}1' FS=':' OFS=' + ' file
산출:
안녕하세요+세상 안녕하세요+세상 안녕하세요+세계+예제
바라보다:8개의 강력한 awk 내장 변수 – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR