shell - 查找有效和无效记录 CSV 文件的脚本
问题描述
我正在尝试根据多列分隔 CSV 文件中的有效和无效记录。我经历了下面的 SO 问题,似乎也在做同样的事情。
但是,对于我的情况,分隔符是 ^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
请有任何建议。
解决方案
请您尝试以下操作。它基本上是在寻找 2 个条件,第一个是检查字段数是否为 3,然后将输出放入Valid.csv
如果字段数大于 3,然后将输出放入Invalid.csv
输出文件。
awk -F'\\^H' 'NF==3 && FNR>1{print > "Valid.csv"} NF>3 && FNR>1{print > "Invalid.csv"} FNR==1{print $0 > "Valid.csv";print $0 > "Invalid.csv"}' sample.csv
现在也添加非单线形式的解决方案。
awk -F'\\^H' '
NF==3 && FNR>1{
print > "Valid.csv"
}
NF>3 && FNR>1{
print > "Invalid.csv"
}
FNR==1{
print $0 > "Valid.csv"
print $0 > "Invalid.csv"
}' sample.csv
推荐阅读
- node.js - Nodejs:allure-reporter 随机隐藏步骤
- c - 如何在 Baytrail SoC 上添加对 PCIe 桥接器的支持到 coreboot
- ios - 无法从数组中删除元素
- r - 如何使用 for 循环将函数应用于数据框中列中的特定值
- spring-boot - Prometheus 端点是一个空白页面 - 在 Spring Boot 应用程序中使用 kamon 和 Prometheus 报告器
- haskell - 如何使用 Servant 实现条件端点?
- python - 如何解决“异常:缺少默认处理程序
在 “ Python Kivy 中的错误? - azure-service-fabric - Service Fabric - 分发内存缓存
- python - Python Docker:在 python docker 中以编程方式获取容器内存使用情况、CPU 百分比
- highcharts - Highcharts wrap 不是一个函数