我想创建一个可以替换 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