如何将脚本从using命令转换为read,命令,cut?

时间:2012-03-09 08:19:00

标签: linux shell

以下是测试样本:

test_catalog,test_title,test_type,test_artist

我可以使用以下sript来删除逗号上面的文本并分别设置变量:

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

(ps:和$ temp_file是测试样本的目录)

如果我想用命令替换read,cut.Any idea?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

男人切?

但严重的是,如果你有一些有效的东西,你为什么要改变呢? 就个人而言,我可能会使用awk或perl来操作linux中的CSV文件。