2016-08-25 121 views
0

我在bash腳本中逐行讀取文本文件。我正在閱讀的文本文件是一個製表符分隔csv - 但是,當我嘗試切割閱讀線,它不起作用,似乎\ t被轉換到某處的空白區域 t標籤在bash腳本中丟失

下面的代碼不是最後我在做什麼 - 我還沒有實現代碼的實際工作量,直到數據可以可靠地讀取。

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv) 
echo $currline |cut -f2 
done 
現在

當我改變了兩行類似下面它的工作原理

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv |tr '\t' ';') 
echo $currline |cut -f2 -d ';' 
done 

,但我不能那樣做我的文本文件還包含「;」 ','和'。'在田野裏。 Tab是我唯一可以接受的選項,因爲我的字段永遠不會包含它。

+1

引用:'echo「$ currline」| cut -f2' – anubhava

+0

或更好地跳過'currline'並使用:'sed -n「$ currlineno」p「$ IMPORT_TABLE」.csv |切-f2' – anubhava

+0

謝謝。實際上,我將不得不提取每個字段的剪輯,並且我想阻止每個30個字段的文件讀取。所以引用變量爲我做了這份工作。謝謝 –

回答

1

這是因爲你不會雙引號你的變量。

tabbed=$'a\tb' 
echo $tabbed : "$tabbed" 

當bash看到報價的變量外,它適用於它的內容分詞和echo只是輸出它的參數用空格隔開。雙引號將值設置爲一個參數,即使它包含空格,換行符等。