2017-07-11 35 views
-2

我有一個將圖數據集更改爲事務數據集的數據轉換問題。我應該使用AWK還是使用不同的語言?使用awk將'n列'csv數據集轉換爲'(n-1)列'數據集

使用第一行標題和期望的輸出示例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 
+1

哪裏呢'ID 3'來自? – RomanPerekhrest

+0

我將權重更改爲3關於「權重」列的限制混淆。 'Adam to Bob'連接發生3次 – adm

+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

修正了錯字... – karakfa

0

哪裏ad.data爲您的數據文件和ad.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 

輸出:

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

我剛剛注意到ID 1在四行中重複。 – adm