2012-03-09 69 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文件。