最後の文字を変更するには?

最後の文字を変更するには?

次の行で構成されるファイルがあります。

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

また、入力ファイルの形式は変更しないでください。

2番目の解決策は、次を変更せずに最後に ";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」に置き換えます。

関連情報