2016-04-26 17 views
0

我嘗試檢索文件結果的第1列,並把此列名爲結果2文件,但問題是我的劇本只寫最後結果在bash中如何在下一行回顯到文件中?

for line in $(cat results | cut -d" " -f1); 
do echo -e "$line">results2; 
done 
+2

注意你正確的做法,只是你每次都用'>'截斷文件。這就是爲什麼你最終只有最後一行。相反,使用'>>'。 – fedorqui

+0

awk'{print $ 1}'results> results2可以滿足您的需求 – Fabich

回答

3

你可以做你想做的事,這樣的外殼:

while read -r col1 rest 
do 
    printf '%s\n' "$col1" 
done <results> results2 

...但它會做很多更有意義,只是這樣做:

cut -d' ' -f1 results > results2 

你的腳本的問題是你在循環內部使用>,它會截斷文件並重新打開它以寫入每一次迭代。您可以通過將整個循環重定向到文件來解決此問題,但正如我所示,最好的方法是重定向cut的輸出。

要讀取shell中的行,請使用while read循環; don't read lines with for。但是,請記住,shell並非設計用於有效執行此任務,而這正是標準工具(如cut)的用途。

相關問題