【问题标题】:Shell - Bash script to export data from multiple text files with fine name as header to csv [closed]Shell - Bash 脚本,用于将多个文本文件中的数据作为标题导出到 csv [关闭]
【发布时间】:2017-02-26 02:30:12
【问题描述】:

我的文件夹“Subj1”中有 900 个文本文件,格式如下

file name 1.txt
file name 2.txt
......
file name 900.txt

每个文件由 4 行 2 列排列的数据组成

667869 667869
580083 580083
316133 316133
9291.5 9291.5

我想将文本文件中的数据导出到 csv 格式的表格中:输出的 csv 文件应该是这种格式

【问题讨论】:

  • 我会试试paste -d';' *.txt
  • 所有文本文件中都有数据,我想将每个文件中的数据移动到csv,我该怎么做
  • Subj1 行显示什么?请在至少 3 个文件的情况下显示输出,并提供更多详细信息。
  • @blackpen , Subj1 是文件夹名称,文件夹的名称应该是输出标题和 filename1 ... filename 900 是文件夹 Subj1 中的文件,在输出 csv 文件中,所有相关信息文件夹 subj1 中的文件应按上述格式排列,我已经编辑了我的问题,请检查它
  • @mouviciel,我只能粘贴每个文件中的数据,但我什至希望每个文件都有一个标题

标签: bash shell csv sh export-to-csv


【解决方案1】:

我认为以下会做到这一点。必备工具paste,不过下面也会输出文件名头行。

{ for f in *.txt; do
  /bin/echo -n -e "$f\t"
done
echo
paste *.txt
} > output.csv

这假定目录中除了源文件之外没有其他以 .txt 结尾的文件。

如果您想要另一个分隔符,例如 ;,请将第 2 行的 \t 替换为 ;,并将最后一行替换为

paste -d ';' *.txt

【讨论】:

  • 我应该如何将所有数据导出到 csv 文件中?
  • 如果我在目录中有 10 个文件夹,名称为 subj1,subj2,subj3..subj10,并且每个文件夹包含 190 个具有相同命名约定的此类文本文件,我怎么能为每个 subj 提供一个 csv 文件?文件夹?
  • 也许最简单的方法是单独进入每个文件夹并在每个文件夹中运行脚本?当然,这也是可编写脚本的。您能否将其作为一个单独的问题发布,并将其标记为已回答(请为答案投票)。
  • 我已经在文件夹中运行了脚本,它给了我语法错误,这是 bash 脚本吗? :以下是错误:语法错误:文件意外结束,语法错误:意外令牌完成
猜你喜欢
  • 1970-01-01
  • 2015-08-22
  • 2013-09-07
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2020-07-28
相关资源
最近更新 更多