2016-08-25 118 views
0

我在bash脚本中逐行读取文本文件。我正在阅读的文本文件是一个制表符分隔csv - 但是,当我尝试切割阅读线,它不起作用,似乎\ t被转换到某处的空白区域 t标签在bash脚本中丢失

下面的代码不是最后我在做什么 - 我还没有实现代码的实际工作量,直到数据可以可靠地读取。

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv) 
echo $currline |cut -f2 
done 
现在

当我改变了两行类似下面它的工作原理

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv |tr '\t' ';') 
echo $currline |cut -f2 -d ';' 
done 

,但我不能那样做我的文本文件还包含“;” ','和'。'在田野里。 Tab是我唯一可以接受的选项,因为我的字段永远不会包含它。

+1

引用:'echo“$ currline”| cut -f2' – anubhava

+0

或更好地跳过'currline'并使用:'sed -n“$ currlineno”p“$ IMPORT_TABLE”.csv |切-f2' – anubhava

+0

谢谢。实际上,我将不得不提取每个字段的剪辑,并且我想阻止每个30个字段的文件读取。所以引用变量为我做了这份工作。谢谢 –

回答

1

这是因为你不会双引号你的变量。

tabbed=$'a\tb' 
echo $tabbed : "$tabbed" 

当bash看到报价的变量外,它适用于它的内容分词和echo只是输出它的参数用空格隔开。双引号将值设置为一个参数,即使它包含空格,换行符等。