提示编辑csv的方法

时间:2014-08-04 12:52:45

标签: csv awk

我有一个csv文件,如:

1;2,3,4
5;2,3
etc

我需要获得如下文件:

1;12
1;13
1;14
5;52
5;53

我可以在没有深度编程的情况下做到这一点,也许像awk之类的东西。我可以在perl或python上做这件事,但ø认为有一种更简单的方法。

4 个答案:

答案 0 :(得分:2)

这是一种方式:

$ awk 'BEGIN{FS=OFS=";"}{n=split($2, a, ","); for (i=1; i<=n; i++) print $1, $1a[i]}' file
1;12
1;13
1;14
5;52
5;53

解释

  • BEGIN{FS=OFS=";"}将输入和输出字段分隔符设置为;
  • {n=split($2, a, ",")根据逗号对第二个字段进行切片。这些片段存储在数组a[]
  • for (i=1; i<=n; i++) print $1, $1a[i]}循环遍历a[]中的字段,将其与FIRST_FIELD格式的第一个字段一起打印; FIRST_FIELD + a [i]

答案 1 :(得分:2)

awk -F '[;,]' '{ for (i = 2; i <= NF; ++i) print $1 ";" $1 $i }' file

输出:

1;12
1;13
1;14
5;52
5;53

答案 2 :(得分:1)

您可以使用awk

awk -F'[;,]' '{for(i=2;i<=NF;i++)printf "%s;%s%s\n",$1,$1,$i}' a.txt

<强>解释

  • -F';|,',;
  • 拆分
  • {for(i=2;i<NF;i++)printf "%s;%s%s\n",$1,$1,$i}迭代列并根据需要生成输出。

答案 3 :(得分:1)

怎么样:

awk -F";" '{sub(/;/,FS $1);gsub(/,/,ORS $1";"$1)}7' file

使用您的数据进行测试:

kent$  echo "1;2,3,4
5;2,3"|awk -F";" '{sub(/;/,FS $1);gsub(/,/,ORS $1";"$1)}7' 
1;12
1;13
1;14
5;52
5;53

或:

awk -F";" 'sub(/;/,FS $1)+gsub(/,/,ORS $1";"$1)' file