在bash中将文件内容转换为特定输出

在bash中将文件内容转换为特定输出,bash,csv,Bash,Csv,我是bash脚本的新手,我正在尝试转换一个文件: 是一个CSV 具有破坏格式的随机换行(CSV中用户的错误输入) 结果需要是一个经过处理的文件,正确地分隔行(一组元素/列的行),消除随机跳转 我的第一个方法是使用 variable=$(cat $1) tr -d "\n" $variable > $variable 然后,通过一个字符一个字符地读,用一个计数器查找“,”,并在找到每一组字符后添加一个换行。尝试执行此操作时,我在IFS=read时找到了上的信息,并尝试了以下操作: wh

我是bash脚本的新手,我正在尝试转换一个文件:

  • 是一个CSV
  • 具有破坏格式的随机换行(CSV中用户的错误输入)
结果需要是一个经过处理的文件,正确地分隔行(一组元素/列的行),消除随机跳转

我的第一个方法是使用

variable=$(cat $1)
tr -d "\n" $variable > $variable
然后,通过一个字符一个字符地读,用一个计数器查找“,”,并在找到每一组字符后添加一个换行。尝试执行此操作时,我在IFS=read时找到了
上的信息,并尝试了以下操作:

while IFS=, read -r col1 col2 col3 col4 <<< $variable; do

    echo "$col1" "$col2" "$col3" "$col4" '\n'

done
当IFS=,读取-r col1 col2 col3 col4而不是
回显“$col1”“$col2”“$col3”“$col4”“”\n'

写下这个

 echo -e "$col1 $col2 $col3 $col4 \n"
实际上问题不在于
shell
,而在于
echo
命令本身,以及变量插值缺少双引号。您可以尝试使用
echo-e
,但并非所有平台都支持这一点,现在推荐使用
printf
的原因之一是便于携带

您还可以尝试将换行符直接插入shell脚本(如果您正在编写脚本),使其看起来像

#!/bin/sh
echo "this is for
test"
#EOF
或同等地

#!/bin/sh
string="this is for
test"
echo "$string"  
# note double quotes!

祝您好运

我没有使用“\n”write“\n”而是更改了中的单个“”,并开始打印“col1 col2 col3 col4\n”,因此我完全删除了添加的换行。在主要帖子中添加了关于它的编辑。谢谢