gpt4 book ai didi

bash - 将值输出到 csvs - 命令行

转载 作者:行者123 更新时间:2023-11-29 09:44:14 25 4
gpt4 key购买 nike

这个站点和一般编程的新手(背景是生物学家)。

无论如何,我有一个任务是获取文本文件名、计算唯一行数、计算总行数并将其输出到 csv 文件中。这是我在 Cygwin 中使用的代码

#!/bin/bash
file=./data/*.txt
name= ls ./data > output.csv
unique= sort $file | uniq | wc -l >> output.csv
total= cat $file | wc -l >> output.csv
nano output.csv

我得到了所有正确的输出,我的问题是:

  1. 我可以选择在哪一列输入每个值吗?目前,它们被直接添加到彼此的下方。

  2. 是否有更有效的方法将输出添加到输出文件?

谢谢!

弗兰

最佳答案

现有代码有许多改进,即:

#!/bin/bash
file=./data/*.txt
name= ls ./data > output.csv
unique= sort $file | uniq | wc -l >> output.csv
total= cat $file | wc -l >> output.csv
nano output.csv

写入output.csv的三行小心设置环境变量 name , uniquetotal清空字符串然后运行命令——这并不完全是错误的,但也确实不是您想要的。 sort | uniq可以简化为sort -u .不需要 cat $file | wc -l什么时候wc -l < $file将用更少的进程完成相同的工作。 ls行生成与通配符扩展相同的名称。与所有文件一起处理相比,一次处理一个文件也有一些问题。

如果您想要一个 CSV 文件,其中包含每个文件的名称、唯一行和总行数,那么我们希望在代码中看到一个循环。

for file in ./data/*.txt
do
unique=$(sort -u $file | wc -l)
total=$(wc -l < $file)
echo "$file,$unique,$total"
done

这运行 sort -u进行唯一排序(不需要显式 uniq ),并捕获 wc -l 的输出.它运行 wc -l使用文件中的标准输入来计算总行数;使用 I/O 重定向停止 wc从打印文件名。然后 echo 打印数据。如果你只想要文件的基本名称(只是 xyz.txt 而不是 ./data/xyz.txt ),那么你可以在 echo 中修复它:

echo "$(basename $file),$unique,$total"

或:

echo "${file##*/},$unique,$total"

唯一可能的缺点是它对每个文件运行一次命令,如果有很多文件,这可能会有点问题。然而,这会奏效——首先把它做好,然后,如果有速度问题,花时间优化它。

关于bash - 将值输出到 csvs - 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18863112/

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