2017-05-22 60 views
0

我有一個.csv文件,我正在處理和我需要輸出另一個csv文件,其中包含一個從第一個csv的第2列和第6列的去重複列表,但有一些注意事項。 這是一個有點難以言傳,但這裏是我的輸入就是一個例子:bash csv文件列提取和重複數據刪除

"customer_name","cid」,」boolean_status」,」type」,」number」 
「conotoso, inc.」,」123456」,」TRUE」,」Inline」,」210」 
"conotoso, inc.","123456」,」FALSE」,」Inline」,」411" 
「afakename」,」654321」,」TRUE","Inline」,」253」 
「bfakename」,」909090」,」FALSE」,」Inline」,」321」 
「cfakename」,」121212」,」TRUE","Inline","145」 

什麼,我需要爲此做的就是創建一個僅包含「CUSTOMER_NAME」欄和「一個新的.csv文件boolean_status「列。 現在,我還需要「customer_name」只有一行,如果任何customer_name與布爾列中的「true」值匹配,則顯示「TRUE」。

從上面輸入輸出應該是這樣的:

"customer_name",」boolean_status」 
「conotoso, inc.」,」TRUE」 
「afakename」,」TRUE" 
「cfakename」,」TRUE" 

到目前爲止,我試過

awk -F "\"*\",\"*\"" '{print $1","$6}' data1.csv >data1out.csv 

給我的輸出文件,但後來我試圖cat data1out.csv | grep 'TRUE'沒有好運氣

有人可以幫我解決我應該怎麼做才能正確操作這個嗎? 我也遇到問題與打印出主要逗號的awk

我最後真正需要的是一些「有多少獨特'customer_names'至少有1'真'在」布爾「柱?」

+2

鑑於','在某些客戶名稱中,使用'awk -F'會出現問題。 –

+0

跟上上面,你能得到一個備用場分隔符? 'tab'是一個很好的選項,或者'''很少在乾淨的帳戶級別數據中找到。然後提供輸出AND很容易,如果真的需要,你可以使用','列分隔符輸出。 (有一天,我會寫一個「(真正的)逗號分隔的數據被認爲是有害的宣言; - /)。祝你好運 – shellter

+0

你絕對需要使用awk嗎?這對於更復雜的語言我想知道是否有任何目的浪費時間來使用'awk/grep/sh',我相當確定它甚至可以在Python中表現得更高效,而不是做多個過程式的lookaheads/lookbehinds, d需要用'awk' ...... – zwer

回答

1

你會得到你去複製文件使用

sort -u -t, -k2,2 -k6,6 filname>sortedfile

帖子這個你可以寫一個腳本來提取所需要的列。

while read line 
do 
grep "TRUE" "$line" 
    if [ $? -eq 0] 
    then 
    a=$(cut -d',' -f1-f3 $line) 
    echo a >>outputfile 
    fi 
    done<<sortedfile 
+0

排序功能做了一個相當不錯的清理工作,但如果客戶在布爾列中同時具有TRUE和FALSE值,那麼它最終會將其降至兩行,一個爲TRUE,一個爲FALSE,但這已經很大幫助了,實際上我認爲我可以通過將其分成兩個列表,一個是所有結構,然後通過將所有TRUE匹配到第一個列表並刪除所有匹配來創建一個列表,從而實現我所期望的。我應該只剩下一些客戶,他們只在布爾流程 – GrumpyCoder

+0

之後只有FALSE值,我使用上面的排序命令創建了deduped.csv 我使用了'cut -d,-f1,6 GrumpyCoder

+0

因此bash腳本需要一些語法修復閱讀,但它的確有訣竅: 'while read line;做 grep -qi「true」<(echo「$ {line}」)||繼續 a = $(cut -d','-f1,3) echo $ a> ./dowhile.csv done <「$ {file}」' – GrumpyCoder