Use*_*ser -1 awk text-processing csv
我有一个巨大的 csv 文件,其格式为
aaa1, "aaa2, aa214", aa21, "aa, a14", aa211, aa44, aaa445
data, data, data, data, data, data, data,
........................................
........................................
Run Code Online (Sandbox Code Playgroud)
我想提取标题包含特定字符串的列,比如说a2
. 对于上面的示例,这包括列aaa2
等等aa21
。
我尝试过的 awk 命令是
awk --csv 'NR==1 {for (i=1; i<=NF; i++) if ($i ~ /a2/) print $i}' file.csv
Run Code Online (Sandbox Code Playgroud)
但这只返回匹配的标题,而不返回它们下面的列。请指出我正确的方向。我使用的是Linux系统。
mlr
确实支持这种伪造的 CSV 格式,并且可以基于正则表达式剪切字段:
$ mlr --csv --csv-trim-leading-space --allow-ragged-csv-input cut -rf a2 your-file.csv
"aaa2, aa214",aa21,aa211
data,data,data
Run Code Online (Sandbox Code Playgroud)
不过,这不会扩展到内存不适合的 CSV。为了--allow-ragged-csv-input
应对每行中字段数量与示例中不同的 CSV,在任何情况下都必须完整读取文件,以了解有多少个列(没有标题的列会自动分配数字标题) )。
归档时间: |
|
查看次数: |
120 次 |
最近记录: |