我有一个将图表数据集更改为事务数据集的数据转换问题。我应该使用AWK还是使用其他语言?
使用第一行标题和所需输出对csv输入进行示例。
input.csv
TO, FROM, WEIGHT
Bob Jones, Tom P. Fisher, 1
Adam Left, Bob Jones, 3
output.csv
ID, TARGET
1, Bob Jones
1, Tom P. Fisher
2, Adam Left
2, Bob Jones
3, Adam Left
3, Bob Jones
4, Adam Left
4, Bob Jones
答案 0 :(得分:1)
awk 解决方案:
awk -F',[[:space:]]*' 'BEGIN{ print "ID, TARGET" }NR>1{ id_cnt+=$3; id=(NR==2)? 1 : id_cnt-$3;
for(i=id;i<=id_cnt;i++) printf("%d, %s\n%d, %s\n",i,$1,i,$2) }' file
输出:
ID, TARGET
1, Bob Jones
1, Tom P. Fisher
1, Adam Left
1, Bob Jones
2, Adam Left
2, Bob Jones
3, Adam Left
3, Bob Jones
4, Adam Left
4, Bob Jones
答案 1 :(得分:1)
awk中的另一个人:
$ awk '
BEGIN {
FS=OFS=", " # set delimiters
print "ID", "TARGET" # output header
}
$NF~/[0-9]+/ { # process records which end in a value
for(i=1;i<=$NF;i++) { # loop $NF many times
c++ # counter
for(j=1;j<NF;j++) # for each name
print c, $j # print count and name
}
}' file
ID, TARGET
1, Bob Jones
1, Tom P. Fisher
2, Adam Left
2, Bob Jones
3, Adam Left
3, Bob Jones
4, Adam Left
4, Bob Jones
答案 2 :(得分:0)
ad.data
是您的数据文件,ad.csv
是您的输出文件。
awk 'BEGIN {FS=OFS=","} {print $3, $1\n$2, $1}' ad.data>ad.csv