替换 unix 文件中的特定数字

替换 unix 文件中的特定数字

我想创建一个可以替换 Unix 文件系统中特定数字的命令,例如:

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

我有 ZAR, ZEC,ZDA 作为我的标题-9ZDA必须替换为 +9。我应该写什么命令,以便它会更改该数字,而不更改ZAR字段中存在的其他值(例如“-9”)?

答案1

-9要将文件第三列中出现的任何内容更改为+9

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

$3==-9选择第三列为 的行-9。对于这些行,分配$3="+9"将该列更改为+9。这1是 awk 中 print-the-line 的神秘简写。最后,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

要更改输入文件本身,请-i用于 GNU 版本(或-i.bak在 OSX/BSD 上)

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

相关内容