如何在 Linux /Solaris 中替换文件中的定位值

如何在 Linux /Solaris 中替换文件中的定位值

我的文件包含用管道分隔的行,如下所示。

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|

相关内容