2012-12-21 120 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 _'会更合适? –