gpt4 book ai didi

从文本生成 csv 文件的 Bash 脚本

转载 作者:行者123 更新时间:2023-11-29 09:47:30 31 4
gpt4 key购买 nike

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

  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 对值执行空格标记化和通配符扩展。)

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com