我有一个搜索短语列表。我试图将第三列替换为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
答案 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
您会在数据之后看到额外的,,
,因为它会以您测试的方式创建两个额外的字段。