Unix 如果等于AWK,则更改特定列

Unix 如果等于AWK,则更改特定列,unix,awk,sed,Unix,Awk,Sed,我有一个搜索短语列表。我试图将第三列替换为N/A,如果它等于“error”。我在第二列中使用了以下代码成功地完成了这项工作。所以,我不知道为什么它在第三栏不起作用。有什么想法吗 data protector new ipad,0,error 60 led lcd television,0,error boost mobile new phone 2013,0,error seagate st320014a,0,error awk -F, '{$3=($3=="error"?"N/A":$3)}

我有一个搜索短语列表。我试图将第三列替换为N/A,如果它等于“error”。我在第二列中使用了以下代码成功地完成了这项工作。所以,我不知道为什么它在第三栏不起作用。有什么想法吗

data
protector new ipad,0,error
60 led lcd television,0,error
boost mobile new phone 2013,0,error
seagate st320014a,0,error

awk -F, '{$3=($3=="error"?"N/A":$3)}1' OFS=, nTotal.csv > n3Total.csv

试试这个
awk

awk -F, '$3=="error" {$3="N/A"}1' OFS=, file
data
protector new ipad,0,N/A
60 led lcd television,0,N/A
boost mobile new phone 2013,0,N/A
seagate st320014a,0,N/A

您的解决方案提供:

data,,
protector new ipad,0,N/A
60 led lcd television,0,N/A
boost mobile new phone 2013,0,N/A
seagate st320014a,0,N/A

您可以在数据之后看到额外的
,因为它以您测试的方式创建了两个额外的字段。

您的
awk
命令是正确的,不是有效的,而是正确的。然而,可能还有其他原因说明它可能不起作用

  • 错误
    后可能有一个尾随空格。因为您测试的是第三列的精确匹配,所以它可能会失败

  • 您的文件是dos格式的。如果您在windows计算机上创建了这些文件,并且正在unix/linux计算机上使用这些文件,那么您需要转换这些行尾。执行
    cat-vet
    将在末尾显示
    ^M
    字符。您可以使用
    dos2unix
    或类似的实用程序将其转换为unix格式