我有一个csv文件,如:
1;2,3,4
5;2,3
etc
我需要获得如下文件:
1;12
1;13
1;14
5;52
5;53
我可以在没有深度编程的情况下做到这一点,也许像awk之类的东西。我可以在perl或python上做这件事,但ø认为有一种更简单的方法。
答案 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