Bash 脚本从文本生成 csv 文件

标签 bash shell sh export-to-csv

我有一个包含记录的文本文件:

  Data1

  Data2

  ...

  Data50

我必须按照以下格式从上述文本文件创建一个 .csv 文件:

Type |  Count | Name

Def |    u1 |    Data1

Def |    u2  |     Data2

....  |  .....   |  ....

Def  |   u50   | Data50

我需要一个 bash 脚本来从文本文件生成 .csv 文件。我是 shell 脚本新手!我也了解了 awk 和 sed 的基础知识。 我有一个模糊的想法,例如:

#!/bin/bash
type="Def"
x=1
count="u"
for F in ../test.txt
do
    {
       read \n
       echo "$type, $count$x, $..." >> ../test.csv
       x=x+1
    } < $F

done 

我确实知道字段分隔符是“\n”。在那之后我有点迷失了。

谢谢!

最佳答案

您的 for 循环只会循环一次,它会循环遍历您列出的标记,而您只列出了一个(看起来像文件名,所以我猜您想循环遍历文件中的行):

#!/bin/bash
type="Def"
x=1
count="u"
while read value; do
   echo "$type, $count$x, $value"
   let x++
done <../test.txt > ../test.csv

您还可以使用外部实用程序来获取运行数字:

nl ../test.txt |
while read -r x value; do
    echo "$type,$count$x,$value"
done >../test.csv

在循环外重定向更加高效,因为 shell 不必关闭并重新打开输出文件。

如果想在命令行中传入变量文件名,只需将硬编码的../test.txt替换为"$1"即可。您可以类似地参数化输出文件名,但我只需删除输出重定向,并将其留给调用者来决定如何处理脚本的输出。

如果您需要读取多个字段并以逗号分隔,请调整您的 IFS

nl -s , ../test.txt |
while IFS=, read -r i first second rest; do
    printf "%i,%s,u%i,%s\n" $i "$first" "$second" "$rest"
done

(printfecho 更值得推荐,特别是当你的输出要求非常重要时。我没有专门引用 $i 来摆脱由 nl 在行号之前添加的任何前导空格。否则,通常应始终在变量周围使用双引号,除非您特别要求 shell 对值执行空格标记化和通配符扩展。)

关于Bash 脚本从文本生成 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700492/

相关文章:

python - 在 Linux 中 grep 列出文件中另一百万条记录中的 1000 条记录的最快方法

Bash 更新问题

Linux 终端 : Run command when changing directory

Python 脚本从 Bash 脚本运行而不记录

shell - fish shell : append argument to an existing function

linux - shell脚本中字符串变量中的特殊字符

linux - 使用 Linux bash 命令或脚本将编号文件复制到相应的编号目录

linux - 通过fabric脚本在远程服务器上设置umask

Git 提交后钩子(Hook)控制台日志

Linux shell 脚本搜索/tmp 并附加或替换/etc/fstab 中的挂载选项