如何防止在bash中读取行时写入新行

时间:2015-07-21 09:22:25

标签: bash

下面的示例代码在每次迭代时将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

2 个答案:

答案 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'