最近要处理一个csv文件,起始是这样的:
id | mmid | cp |
---|---|---|
zy006 | 2200112411 | 小米商城 |
zy007 | 2200123091-3003904564 | 掌游自有渠道 |
zy008 | 0 | MM应用商城 |
zy101 | 2200131184-2200131784 | 多酷 |
zy102 | 2200017122-2200126498-2200127284-3003898651 | 3G门户 |
zy104 | 3003904473 | 软吧 |
第二列是多个元素组合起来的,现在要导入到数据库里面,把第一列和第二列的元素使用一个关联表而不是这样使用数据拼接的方式。
要处理的结果是抽出第一列和第二列,然后第二列使用’-‘分割新建一条记录。
步骤如下:
1 抽出数据到新文件:
awk -F "," 'NR>1{printf("%s,%s\n", $1, $2)}' data.csv> mmid.csv |
NR代表当前的记录的数值,表示第几个记录了,这里忽略掉第一行。
2 分割数据并创建新记录
awk -F '[,-]' '{for(i=2;i<NF;i++) {printf("%s,%s\n", $1, $i)}}' mmid.csv > channel_mmid.csv |
使用-F 设置两个分割参数,使用一个循环,其中NF是number of fields的简写,表名当前当有多少条记录,对应有NR,number of record
3 完成
使用awk处理excel/csv文件真的非常的方便
4 扩展
删除记录中的某一列
awk -F ',' 'BEGIN{OFS=","; } NR>1{str=""; for (i=1; i<=NF;i++) if (i != 2) str = str "," $i; print str}' channel-manage.csv > new-channel-manage.csv |