下面的示例代码在每次迭代时将hi写入新行。有办法防止这种情况吗?
#!/bin/bash
while read line; do
var=$(echo $line | cut -d \, -f 2)
echo -n " $var"
done < file.csv > output.txt
期望的输出是每次迭代时“$ var”的串联。代码在OS X中运行。
[解决]
在大多数类似问题的情况下,klashww的回答将是您想要尝试的,以便我接受它作为答案。然而,就我而言,这些选项都无法修复bug。这种行为是由于未显示的字符&#39; ^ M&#39;在每行的末尾,因为文件来自windows。我重新学习,我们应该确保摆脱&#39; ^ M&#39;在通过下面的行在bash中处理它之前。之后,原始代码工作正常。
tr -d '\015' < file > newfile
答案 0 :(得分:1)
您可能想尝试使用纯bash:
while IFS=',' read nu1 var nu2; do
echo -n " $var"
done < file.csv > output.txt
nu
:&#34;未使用&#34;
答案 1 :(得分:-1)
如果可用,请使用echo "hi\c"
代替echo -n "hi"
或printf
,例如printf "hi"
。
在您的示例中,这应该有效:
while read line; do
var=$(echo $line | cut -d \, -f 2)
printf " $var"
done < file.csv > output.txt
或者您可以使用更好的工具:
awk -F\, '{printf " "$2}' file.csv > output.txt
如果一切都失败tr
暴力:
echo " $var"| tr -d '\n'