awk - 使用 awk 读取具有多个字符作为字段分隔符的 CSV
问题描述
我有一种 CSV 文件|#|
用作分隔符
$ cat /tmp/dd.csv
animal|#|mysize|#|weight|#|adult|#|age|#|length
0|#|cat|#|S|#|8|#|False|#|3|#|30.0
1|#|dog|#|S|#|10|#|False|#|4|#|46.66666666666667
2|#|cat|#|M|#|11|#|False|#|5|#|63.333333333333336
3|#|fish|#|M|#|1|#|False|#|6|#|80.0
4|#|dog|#|M|#|20|#|False|#|7|#|96.66666666666667
5|#|cat|#|L|#|12|#|True|#|8|#|113.33333333333334
6|#|cat|#|L|#|12|#|True|#|9|#|130.0
$
我想awk
用来提取第 3、1 和 4 列。
我明白了:
$ cat /tmp/dd.csv | awk -F'|#|' '{print $3 ";" $1 ";" $4}'
|weight|;animal|;|adult|
|S|;0|;|8|
|S|;1|;|10|
|M|;2|;|11|
|M|;3|;|1|
|M|;4|;|20|
|L|;5|;|12|
|L|;6|;|12|
它“几乎”工作,但我只想:
weight;animal;adult
S;0;8
S;1;10
M;2;11
M;3;1
M;4;20
L;5;12
L;6;12
解决方案
我建议使用 GNU awk:
awk -F '\\|#\\|' -v OFS=';' '{print $3,$1,$4}' /tmp/dd.csv
有必要对特殊字符进行转义|
。输出:
重量;动物;成人 S;0;8 S;1;10 M;2;11 M;3;1 M;4;20 L;5;12 L;6;12
推荐阅读
- android - 如何生成pdf417
- c++ - SublimeText 不允许我用一个语句为 if-else 条件输入一个花括号
- sql - 两个group by和总和sql的百分比
- java - Liferay:如何在每个月的第一个星期日上午 8:00 到 11:00 之间以 5 分钟为间隔自动发送批量电子邮件
- cors - 工作箱后台同步 CORS
- php - mysqli_query 在类中带有准备好的语句
- python - 使用递归计算纳皮尔常数 (e)
- powerbi - 访问 PowerBI 中列表列的第一个元素
- powershell - If Else 语句 Powershell CSV 和输出 CSV
- angularjs - 在 JSON 对象键上使用 ng-repeat 在 md-tabs 中生成选项卡