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

时间:2014-08-22 17:29:59

标签: unix awk sed

我有一个搜索短语列表。我试图将第三列替换为N / A,如果它等于“错误”。我使用以下代码在第二列上成功执行此操作。所以,我不确定为什么它不在第三栏上工作。有什么想法吗?

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

2 个答案:

答案 0 :(得分:3)

您的awk命令是正确的,效率不高但是正确。但是,可能还有其他原因导致它可能无法正常工作。

  • error后可能有一个尾随空格。由于您测试了第三列的完全匹配,因此可能会失败。

  • 您的文件是dos格式化的。如果您在Windows机器上制作文件并在unix / linux机器上使用它,那么您需要转换这些行结尾。执行cat -vet会在结尾显示^M个字符。您可以使用dos2unix或类似的实用程序将其转换为unix格式。

答案 1 :(得分:0)

试试这个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

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