繁体   English   中英

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

[英]Transform file content to an specific output in bash

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

  • 是 CSV
  • 具有破坏格式的随机行跳转(来自用户在 CSV 中的错误输入)

结果需要是一个正确分隔行的处理文件(一组元素/列的行),删除随机跳转。

我的第一个方法是使用

variable=$(cat $1)
tr -d "\n" $variable > $variable

然后虽然通过字符读取字符寻找','与计数器,并在找到它们的每组数字后添加一行跳转。 尝试执行此操作时,我找到了有关while IFS= read并尝试了以下操作:

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

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

done

我显然在那里遗漏了一些东西(我什至相信while循环应该已经删除了行跳转,请纠正我)而且我不知道如何继续下去。 我不是在寻找可以完成这项工作的一堆代码,而是试图在这里找到可以为我指明正确方向的人(也许我不了解 IFS,或者我需要在该步骤之前处理一些事情......不管它是什么)。

提前致谢。

编辑:我删除了我在 echo 中添加的行跳转,它现在打印 col1 col2 col3 col4 并且永远不会结束,所以我显然无法在打印之前将文件中的每个元素链接到变量。

而不是echo "$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!

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM