以下是测试样本:
test_catalog,test_title,test_type,test_artist
我可以使用以下sript来删除逗号上面的文本并分别设置变量:
IFS=","
read cdcatnum cdtitle cdtype cdac < $temp_file
(ps:和$ temp_file是测试样本的目录)
如果我想用命令替换read,cut.Any idea?
答案 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文件。