【发布时间】:2019-03-16 07:52:37
【问题描述】:
我正在尝试根据列数分隔 CSV 文件中的有效和无效记录。 我经历了下面的 SO 问题,似乎也在做同样的事情。
Delete row which has more than X columns in a csv
但是对于我的大小写分隔符是 ^H,所以尝试了以下方法。
awk -v FS="\b" 'NF==3' sample.csv >> output.csv
awk -v FS="\\^H" 'NF==3' sample.csv >> output.csv
awk -v FS="\\cH" 'NF==3' sample.csv >> output.csv
awk -v FS="^H" 'NF==3' sample.csv >> output.csv
但是,^H 分隔符没有任何作用。
此外,在前面的 SO 问题中,他们正在捕获有效记录(以输出),我想将无效记录捕获到两个不同的文件中。
Sample.csv
timestamp,header2,header3
1^H1val2^H1val3
2^H2val2^H2val3
3^H4^H4val2^H4val3
5^H5val2^H5val3
6^H6val2^H6val3
Valid.csv
timestamp,header2,header3
1^H1val2^H1val3
2^H2val2^H2val3
5^H5val2^H5val3
6^H6val2^H6val3
Invalid.csv
timestamp,header2,header3
3^H4^H4val2^H4val3
请给点建议。
【问题讨论】:
-
您为什么将
^H视为有效文件内容的一部分? -
因为这是 CSV 文件@Inian 的分隔符
标签: shell unix awk sed scripting