Unixファイルの特定の数字を置き換える

Unixファイルの特定の数字を置き換える

Unixファイルシステムで特定の数字を置き換えるコマンドを作成したいと思います。たとえば、次のようになります。

ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

私のタイトルはZAR、です ZECZDA-9をZDA+9に置き換える必要があります。ZARフィールド内の他の値(「-9」など)以外の数値を変更するには、どのコマンドを作成する必要がありますか?

答え1

-9ファイルの3番目の列に表示される内容を次に変更するには、次の手順を実行します+9

$ awk '$3==-9 {$3="+9"} 1' OFS='\t' file
ZAR     ZEC     ZDA
-9      2       3
4       8       +9
5       6       7

$3==-93番目の列で行を選択します-9。これらの行の場合、割り当ては$3="+9"列をに変更します+9。これは1print-the-lineのawkの神秘的な速記です。最後に、OFS='\t'タブ文字をフィールド区切り文字として使用して出力を印刷するように awk に指示します。

場所でファイルを変更する

GNU awkを使用する(Linux):

awk -i inplace '$3==-9 {$3="+9"} 1' OFS='\t' file

BSD/OSX awkの使用:

awk '$3==-9 {$3="+9"} 1' OFS='\t' file >tmp && mv tmp file

答え2

$ cat file
ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

このZDA列が最後のフィールドなので

$ sed 's/-9$/+9/' file
ZAR     ZEC      ZDA
-9         2      3
4          8      +9
5          6      7

-iGNUバージョン(または-i.bakOSX / BSD)の場合、入力ファイル自体を変更するには

sed -i 's/-9$/+9/' file

関連情報