【问题标题】:Bash: find and concatenate filesBash:查找和连接文件
【发布时间】:2017-02-13 17:50:44
【问题描述】:

我有以下结构:

/家/ ├── DIR1/ │ └── file_ab.csv ├── DIR2/ │ └── file_cd.csv └── DIR3/ └── file3_ef.csv

其中file_**.csv 包含浮动行,每个 DIR 都有不同的浮动。

我想获取所有file_**.csv 文件的内容并将它们连接起来。

我找到了这个答案here

find /home -type f -name '*.csv' -exec cat {} \; > pl_parameters

但我得到一个名为“pl_parameters”的空文件。为什么文件是空的?我该如何解决这个问题?

【问题讨论】:

  • 为什么不直接使用cat /home/*/file1.csv > pl_parameters
  • 我尝试了您建议的修改版本:cat /home/*/*.csv > pl_parameters 但没有运气。

标签: bash csv


【解决方案1】:
find /home/DIR* -name 'file*csv' |xargs cat > output.csv

find /home/DIR* -name '*csv' 为您提供文件的绝对路径。

xargs cat 将迭代文件,cat 打印文件内容

【讨论】:

  • 我可以用密码代替'home'吗?
  • find $(pwd)/DIR* -name '*csv'
  • 最终的工作版本,因为我每个目录只有一个 csv 文件,是:find $(pwd)/RUN* -name '*csv' |xargs cat > pl_paras_means.csv
  • @StatsSorceress 查看 Karthick 的评论,很有帮助!
【解决方案2】:

使用 Bash 4.0+,您可以使用 globstar 并使用更直接的命令:

shopt -s globstar
cd /home
cat **/*.csv > pl_parameters

**/ 扩展为当前目录下的整个目录树。


你的命令:

find /home -type f -name '*.csv' -exec cat {} \; > pl_parameters

对我来说看起来不错 - 不知道为什么你的输出文件是零。

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2015-05-09
    • 2014-09-16
    • 2010-12-06
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多