2017-07-11 13 views
-2

グラフデータセットをトランザクションデータセットに変更するデータ変換の問題があります。 AWKを使用するか、別の言語を使用すべきですか?'n列'のcsvデータセットを '(n-1)列'データセットに変換するawkを使用

最初の行のヘッダーと希望する出力のサンプルcsv入力。

ad.dataは、データファイルと ad.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 
+1

し 'ID 3 'から来た? – RomanPerekhrest

+0

「体重」欄について体重を3回混乱させました。 'Adam to Bob'接続は3回発生します – adm

+1

2番目のテーブルは元のデータに基づいて意味がありません.... –

答えて

1

別:

$ 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

はタイプミスを修正しました... – karakfa

0

input.csv

awk 'BEGIN {FS=OFS=","} {print $3, $1\n$2, $1}' ad.data>ad.csv 
+0

体重を3に変更しましたか? – adm

+0

エラーが発生しています。 awk:1行目付近の構文エラー awk:1行目付近の不正な文 – adm

+0

データファイルが何であれ、 'ad.data'を含むディレクトリでこれを実行する必要があります。 –

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 

出力:AWKで

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 
+0

ID1が4行で繰り返されていることに気付きました。 – adm

関連する問題