2015-06-21 27 views
-1

我有一個CSV文件,列A,B,C。我有一個腳本,它將讀取2個句子並輸出分數。具體來說,我需要腳本來閱讀col B和col C來輸出分數。使用管道運行一個文件並將結果附加爲新欄

例如:

A  B  C 
id string1 string2 

我的腳本以這種方式工作:MyScript可(字符串1,字符串)=得分

我如何寫一行代碼,只需要列B和C,然後輸出一切都變成了新文件?

我想有輸出到這樣一個新的文件:

我相信代碼會是這樣的,但不知道正確的語法。

textfile.csv | perl myscript.pl > new_textfile.csv 

請幫

回答

0

我相信這是你所需要的

$ awk -F "," '{print $2,",",$3;}' textfile.csv | perl myscript.pl > new_textfile.csv 
0

標準Unix工具 「添加列」 是paste

如果你的腳本生成一行輸出爲textfile.csv輸入的每一行,你可以粘貼文件一起並排側是這樣的:

perl myscript.pl > tmpfile.csv 
paste -d , textfile.csv tmpfile.csv > new_textfile.csv 

或者你可以在一個做到這一點一步用管代替(省略臨時文件):

perl myscript.pl | paste -d , textfile.csv - > new_textfile.csv 

如果你的腳本才動作2列輸入3,不知道怎麼不理列1,你可以提取2列和3供給您的腳本:

awk -F, '{print $2, $3}' textfile.csv | perl myscript.pl | ... 

(但要注意的是用AWK調用-F,不是一個完全通用的CSV解析器,而不會處理引用。)

最後,如果你的腳本的每次調用只知道如何在一臺運行對數字(即從textfile.csv一行輸入),你可以使用一個循環,像這樣的:

cp /dev/null tmpfile.csv 
awk -F, '{print $2, $3}' textfile.csv | while read col2 col3 
do 
    perl myscript.pl $col2 $col3 >> tmpfile.csv 
done 
paste -d , textfile.csv tmpfile.csv > new_textfile.csv 

或者你可以讓幻想和重定向環路的輸出:

awk -F, '{print $2, $3}' textfile.csv | while read col2 col3 
do 
    perl myscript.pl $col2 $col3 
done > tmpfile.csv 
paste -d , textfile.csv tmpfile.csv > new_textfile.csv 

或者,如果你真的想成爲一個牛仔:

awk -F, '{print $2, $3}' textfile.csv | while read col2 col3 
do 
    perl myscript.pl $col2 $col3 
done | paste -d , textfile.csv - > new_textfile.csv 
相關問題