【发布时间】:2018-12-17 21:16:46
【问题描述】:
如何使用awk 查找和替换特定列的值?
比如说 -> 我有一个包含以下内容的文件测试:
"abc":"100"::"新"
"xyz":"200":"mob":"old"
"lmn":"300"::"新"
"pqr":"400":"mob2":"新"
现在,如果第 3 列为空白,那么我想替换 "N/A" 中的空白值,否则按原样打印该行,以便输出如下:
"abc":"100":"N/A":"新"
"xyz":"200":"mob":"old"
"lmn":"300":"N/A":"新"
"pqr":"400":"mob2":"新"
虽然我通过以下命令使用 awk 获得了输出:
awk -F":" '{
if ( $3 == "")
print $1":"$2":\"N\/A\":"$4
else
print $0
}' test
但在这里我使用了每个列的硬编码值,例如$1、$2,因此如果其他示例中的空白列从第 3 列更改为 xyz,则必须再次在命令中更改相同的值。有没有其他方法可以使用 awk 而不使用列的硬编码值来获得相同的输出?感谢您的帮助。
【问题讨论】:
-
您的意思是替换任何空列?或者只是任意列的空值,并且仅在该列上?
-
替换应该只适用于那些第三列的值为空白的行...
-
那么
if the blank column changes in other example from 3rd to xyz then have to change the same in command again是什么意思?听起来您是在说您想更改任何空白列,但随后您还说the replace should work only for those rows in which value of 3rd column is blank,这意味着应该只测试/更改第 3 列。很不清楚....