下面是测试样品:如何从使用命令转换脚本,读取命令,剪切?
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