我正在bash脚本中逐行读取文本文件。我正在阅读的文本文件是一个标签分隔的csv - 但是当我尝试剪切读取行时,它不起作用,似乎\ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ / p>
下面的代码不是我最后要做的 - 我还没有实现代码的实际工作量,直到可以可靠地读取数据。
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是我唯一可以接受的选项,因为我的字段永远不会包含它。
答案 0 :(得分:1)
那是因为你没有对你的变量进行双重引用。
tabbed=$'a\tb'
echo $tabbed : "$tabbed"
当bash看到引号之外的变量时,它会在其内容上应用单词拆分,而echo
只输出由空格分隔的参数。双引号使值成为一个参数,即使它包含空格,换行符等。