2016-12-06 41 views
0

文件我有一個腳本,其通過行編輯的.csv經由外殼腳本輸出

kma210,projects.kma210 
kma215,projects.kma215_2 
KMA3xx,projects.kma3xx 
KMI7,projects.kmi7 

需要.csv文件作爲輸入,並運行行上面一個是用於.csv文件的樣本。我有兩種類型的進程爲每一行運行(例如:abc_process和xyz_process)。

現在我的要求是一旦腳本運行一行,輸出即成功/失敗應打印在第三列(abc_process)和第四列(xyz_process)中的同一文件中。

例請看這裏:

kma210,projects.kma210,success,success 
kma215,projects.kma215_2,fail,success 
KMA3xx,projects.kma3xx,success,fail 
KMI7,projects.kmi7,fail,fail 

任何人都可以請建議?

+0

您是如何獲得該狀態的? 'success' /'fail'? – Inian

+0

您必須檢查併發文件訪問 – Aserre

+0

@Inian我對輸出進行了回顯以查看它是成功還是失敗。 回聲「abc_process成功」 回聲「xyz_process成功」 是否有可能解析回聲輸出並添加第三,第四列? –

回答

1

我認爲你正在努力實現的就是這樣的事情。

從輸入文件(input.csv),按如下方式使用該腳本: -

#!/bin/bash 

while IFS=',' read -r col1 col2 
do 
    # The below two read commands are to process the success/fail status 
    # string as you indicated. If you are receiving a string of the below 
    # form, from an external bash command; you need to use process-substitution 
    # as 

    # IFS= read -r _ p1Status <<(p1Command) 
    # IFS= read -r _ p1Status <<(p2Command) 

    IFS= read -r _ p1Status <<<"abc success" 
    IFS= read -r _ p2Status <<<"xyz fail" 

    # The below printf just prints the output as you need to stdout 
    # to create a .csv out of it, append it to a new file as 

    # printf "%s,%s,%s,%s\n" "$col1" "$col2" "$p1Status" "$p2Status" >> output.csv 

    printf "%s,%s,%s,%s\n" "$col1" "$col2" "$p1Status" "$p2Status" 
done<input.csv 

上面的命令是這樣的書面stdout,產生一個輸出作爲

kma210,projects.kma210,success,fail 
kma215,projects.kma215_2,success,fail 
KMA3xx,projects.kma3xx,success,fail 
KMI7,projects.kmi7,success,fail 

它可以追加使用>>運算符將文件註釋到文件中。或者如果你想要一個文件並替換原始文件。添加一行

mv -v output.csv input.csv 

作爲腳本的最後一行。

+0

我是一名編程新手,我會請給我的腳本在這裏,你能把它合併到它嗎? –

+0

SO是不是一個免費的編碼服務,你必須嘗試從我已經提供的解決方案即興創作。你可以發佈你的要求,讓我看看怎麼可以我幫你。 – Inian