2012-03-09 71 views
0

下面是測試樣品:如何從使用命令轉換腳本,讀取命令,剪切?

test_catalog,test_title,test_type,test_artist 

,我可以使用下面的sript通過逗號切斷上面的文字和分別設置變量:

IFS="," 
read cdcatnum cdtitle cdtype cdac < $temp_file 

(PS:和$ temp_file是測試樣品的目錄)

如果我想用命令替換讀取,cut.Any的想法?

回答

1

解決方法有很多:

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" 
+0

+1數組.. – Jayan 2012-03-09 09:08:56

+0

好了,反正我覺得閱讀是最好的way.And我想如果我使用剪切通過你的方式命令,我想我應該一個一個分開這個詞。是嗎? – 2012-03-12 01:34:42

+0

是的,'cut'總是隻能返回一個結果。 – 2012-03-12 09:21:08

0

man cut?

但是,嚴重的是,如果你有一些工作,你爲什麼要改變它? 就我個人而言,我可能會使用awk或perl來操作Linux中的CSV文件。