下面是測試樣品:如何從使用命令轉換腳本,讀取命令,剪切?
test_catalog,test_title,test_type,test_artist
,我可以使用下面的sript通過逗號切斷上面的文字和分別設置變量:
IFS=","
read cdcatnum cdtitle cdtype cdac < $temp_file
(PS:和$ temp_file是測試樣品的目錄)
如果我想用命令替換讀取,cut.Any的想法?
下面是測試樣品:如何從使用命令轉換腳本,讀取命令,剪切?
test_catalog,test_title,test_type,test_artist
,我可以使用下面的sript通過逗號切斷上面的文字和分別設置變量:
IFS=","
read cdcatnum cdtitle cdtype cdac < $temp_file
(PS:和$ temp_file是測試樣品的目錄)
如果我想用命令替換讀取,cut.Any的想法?
解決方法有很多:
line=$(head -1 "$temp_file")
echo $line | cut -d, ...
或
cut -d, ... <<< "$line"
,或者你可以告訴bash行復制到一個數組:
typeset IFS=,
set -A ARRAY $(head -1 "$temp_file")
# use it
echo $ARRAY[0] # test_catalog
echo $ARRAY[1] # test_title
...
我更喜歡,因爲陣列解決方案它給你一個獨特的數據類型,並清楚地傳達你的意圖。回聲/切割解決方案也有點慢。
[編輯]另一方面,read
命令將行分成單獨的變量,它給每個值的名稱。哪個更具可讀性:$ARRAY[0]
或$cdcatnum
?
如果你移動列,你只需要在參數重新安排到read
命令 - 如果你使用數組,你將不得不更新所有的數組索引你將得到錯誤的。
而且read
使得它更簡單處理整個文件:
while read cdcatnum cdtitle cdtype cdac ; do
....
done < "$temp_file"
man cut?
但是,嚴重的是,如果你有一些工作,你爲什麼要改變它? 就我個人而言,我可能會使用awk或perl來操作Linux中的CSV文件。
+1數組.. – Jayan 2012-03-09 09:08:56
好了,反正我覺得閱讀是最好的way.And我想如果我使用剪切通過你的方式命令,我想我應該一個一個分開這個詞。是嗎? – 2012-03-12 01:34:42
是的,'cut'總是隻能返回一個結果。 – 2012-03-12 09:21:08