【发布时间】:2018-11-14 19:13:31
【问题描述】:
假设我有一个包含许多子目录的目录,每个子目录都包含一些具有相同结构的 CSV 文件(相同的列数并且都包含相同的标题)。
我知道我可以从父文件夹运行类似
find ./ -name '*.csv' -exec cat {} \; > ~/Desktop/result.csv
这会很好用,因为每次都重复标题(每个文件一次)。
我也知道我可以执行sed 1d <filename> 或tail -n +<N+1> <filename> 之类的操作来跳过文件的第一行。
但就我而言,它似乎更专业一些。我想为第一个文件保留一次标题,然后跳过每个文件的标题。
是否有人知道使用标准 Unix 工具(如 find、head、tail、sed、awk 等)和 bash 实现此目的的方法?
例如输入文件
/folder1
/file1.csv
/file2.csv
/folder2
/file1.csv
每个文件都有标题的地方:
A,B,C,每个文件有一个数据行1,2,3
期望的输出是:
A,B,C
1,2,3
1,2,3
1,2,3
标记为重复
我觉得这与 this 和 this 等其他问题不同,特别是因为这些解决方案在解决方案中引用了 file1 和 file2。我的问题是关于具有任意数量文件的目录结构,我不想一个一个地输入每个文件。
【问题讨论】:
-
once for the first file哪个文件是第一个?或者它与获取标题的文件没有区别? -
在这种情况下没有区别 :) 所有文件都包含相同的标题,我不介意哪个先出现。
-
所有链接的问题都不是这个问题的确切副本,因此重新打开。
标签: bash awk sed cat unix-head