替换 csv 文件中的空格和空白单元格

替换 csv 文件中的空格和空白单元格

我有一个包含 7 列的 csv 文件。它包含空单元格,单元格之间有一些空格。我该如何用 NA 替换空单元格并删除多余的空格?非常感谢!

这是我的文件的样子,但是当我复制并粘贴它时它似乎扭曲了。

130070078,PPW0001,1,4,4HW             ,2,15.61943874
120040039,PPW0002,0,0,                ,0,0
120040043,PPW0003,1,3,3WE             ,1,14.43394935

答案1

您的答案:

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' > file2

如果最后一个字段为空,则获取“NA”:

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'> file2

您还可以使用:

sed 's/,,/,NA,/g' file1 | tr -d ' ' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'

答案2

αғsнιη 的回答对我有用,但我只想稍微解释一下。

我正在尝试这样的事情:

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed 's/,,/,-,/g'

输出

1,-,2,-,,3,-,,4,-,,-,5,-,,-,,-,,-,,-,6

由于重复的空字段,最后一个逗号是第一个替换的一部分,也是下一个所需替换的开始,因此您只需替换每个第二个空字段。

现在你可以做类似的事情:

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed -e 's/,,/,-,/g' -e 's/,,/,-,/g'

或者

sed 's/,,/,-,/g;s/,,/,-,/g'

这将替换所有单元格,因为第二个命令将获取遗漏的单元格,但这有点混乱。

αғsнιη 的命令基本上做同样的事情,使用标签和跳转,我不知道你可以做到这一点。

sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'

输出:

1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6

因此命令的第一部分创建了一个标签。

然后我们进行相同的替换。

然后我们有 t 命令,这意味着如果前一个替换命令成功则跳转到标签。

更多信息:http://www.grymoire.com/Unix/Sed.html#uh-59

相关内容