마지막 문자를 바꾸는 방법은 무엇입니까?

마지막 문자를 바꾸는 방법은 무엇입니까?

다음과 같은 줄로 구성된 파일이 있습니다.

199240050;0180209199240050;0
199240241;0180209199240241;0
199240207;0180209199240207;0
199240400;0180209199240400;0

마지막 숫자가 "0"이면 "활성"으로 바꿔야 하고, "1"이면 "비활성"으로 바꿔야 합니다.

시도해 보았지만 sed줄 중간에 나타나는 ";0"도 바뀌었습니다.

Linux bash 스크립트에서 사용해야 합니다.


나는 노력했다DopeGhoti가 제공하는 솔루션하지만 실패합니다.

$ sed 's/0$/active/;s/1$/inactive/'  myLines.txt
800600346                078136521                       active

그리고 입력 파일의 형식은 변경되어서는 안 됩니다.

두 번째 솔루션은 다음을 바꾸지 않고 끝에 ";active"를 추가합니다.

$ awk -F\; 'BEGIN {OFS=";"} { if( $3 == 1 ) { print $1,$2,"inactive" } else { print $1,$2,"active" } }'  myLines.txt
800010654                0295445503                     0;;active

그리고조지 바실리우또한 실패합니다:

$ awk '$NF?$NF="active":$NF="inactive"' FS=';' OFS=';' myLines.txt
active
active
active
active

답변1

파일 이름이 지정된 데이터에 대해 다음을 수행합니다 input.

$ awk -F\; 'BEGIN {OFS=";"} { if( $3 == 1 ) { print $1,$2,"inactive" } else { print $1,$2,"active" } }' input
199240050;0180209199240050;active
199240241;0180209199240241;active
199240207;0180209199240207;active
199240400;0180209199240400;active

또는 다음을 사용하십시오 sed.

$ sed 's/\;0$/active/;s/\;1$/inactive/' input
199240050;0180209199240050;active
199240241;0180209199240241;active
199240207;0180209199240207;active
199240400;0180209199240400;active

답변2

또 다른 이상하고 더 관용적인 내용은 다음과 같습니다.

$ awk '$NF?$NF="inactive":$NF="active"' FS=';' OFS=';' file

마지막 필드 $NF가 평가됩니다. 0이 발견되면 마지막 필드 $NF가 "활성"으로 변경되고, 그렇지 않으면 "비활성"으로 변경됩니다.

인쇄는 기본적으로 수행되므로 생략됩니다.

또 다른 좀 더 관용적인 접근 방식은 변수 할당에 삼항 연산을 사용하는 것입니다.

$ awk '$NF=($NF?"inactive":"active")' FS=';' OFS=';' file

답변3

그리고 perl:

perl -pe 's/\d+(?!.*\d)/$& ? "Inactive" : "Active"/e' < file

뒤에 숫자가 없으면 0이면 "Inactive"로 바꾸고, 그렇지 않으면 "Active"로 바꿉니다.

관련 정보