1

我每天都在类似于 /tmp/data/$yearmonth/$day/$hour 的目录结构中收集一些 tsv 文件。所以 /tmp/data/$yearmonth/$day 里面有 24 个目录

我有这样的shell脚本:

yearmonth=`date -d "-2 days" +%Y%m`
day=`date -d "-2 days" +%d`

files=()
cd /tmp/data/$yearmonth/$day
for i in `ls -a */*.tsv`
do
  files+=($i)
done

数组文件中存储了所有 tsv 文件。我想将所有这些 tsvfiles “cat”到一个 tsvfiles 并想对其执行 sort|uniq -c 。我怎么做?随着 tsv 文件变得巨大,猫会变得非常慢。另一种选择可能是什么。谢谢

4

1 回答 1

1

您显示的代码存在一些问题:

  1. 如果您有足够的文件或子目录中的名称足够长,ls -a则会因参数列表中的文件过多而失败。标准的补救措施是使用find

    查找 /tmp/data/year/mon/day -type f -iname '*.tsv' -print0

  2. 找到后,您可以将它生成的文件列表直接通过管道传输到 sort

    | xargs -0 排序——唯一

cat涉及,但当然,仍然需要找到和读取文件。

于 2013-07-19T02:16:45.443 回答