2012-12-21 89 views
4

鑑於shell腳本先前定義的$行,我做了以下將多個剪切命令爲可變幽會到一個剪切命令

var1=$(echo $LINE | cut -d, -f4) 
var2=$(echo $LINE | cut -d, -f5) 
var3=$(echo $LINE | cut -d, -f6) 

有什麼辦法,我把它組合到一個命令,其中剪輯只運行一次? 喜歡的東西

var1,var2,var3=$(echo $LINE | cut -d, -f4,5,6) 

回答

4

是的,如果你確定使用數組:

var= ($(echo $LINE | cut -d, --output-delimiter=' ' -f4-6)) 

需要注意的是,使var 0索引。

儘管將CSV $LINE轉換爲bash括號可理解的內容可能會更快更容易,然後只需執行var = ($LINE)即可。

編輯:以上會導致一些問題,如果你在你的$ LINE有空格......如果是這樣,你需要多一點謹慎,並可能AWK是一個更好的選擇,添加引號:

var= ($(echo $LINE | awk IFS=, '{print "\"$4\" \"$5\" \"$6\""}')) 
+0

燁正是我一直在尋找。不知道($ LINE)的東西改變了所有的數組。謝謝。 – saccharine

+0

這是一個不好的答案。不要wordsplit命令替換輸出。此外,由於分配語法不正確,它將無法工作。 – ormaaj

8

的內置read命令可以分配給多個變量:

IFS=, read _ _ _ var1 var2 var3 _ <<< "$LINE" 
+1

絕對是最好的答案,只是你認爲只有6個字段。也許'讀_ _ _ var1 var2 var3 _'會更合適? –