我的文件包含用管道分隔的行,如下所示。
45|abc|NULL|hol|
Gha|ghsk|NULL|gah|
如何用连字符 (-) 之类的内容替换第三列值(空)。第三列中的值不是唯一的。任何帮助,将不胜感激?
答案1
awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' file
- 将输入和输出字段分隔符设置为
|
以保留文件中的分隔符 - 检查第三个字段是否等于“NULL”,如果不等于“NULL”,则为其分配值,
-
我们按原样保留该值。 1
最后打印您的行,修改或不修改第三列,具体取决于我们的测试是否成功。($3=="NULL"?"-":$3)
是一个三元运算符,用于检查条件$3=="NULL"
是否为真。如果为真,?
则我们分配-
,如果为假,:
我们保持字段不变。
测试
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|