将具有多个单词实例的文件合并到具有所述单词的实例总数的新文件中

时间:2014-06-25 11:28:23

标签: unix text merge terminal concatenation

所以我有以下格式的大量数据(.txt文件):

  1500 this
  1450 is
  1200 some
  1000 data

该数字是我使用以下Unix终端命令连接的其他一些文本文件中的以下单词的实例数:

  cat *.txt | tr " " "\n" | sort | uniq -c | sort -gr > somefile.txt

现在我有一些somefile.txt(所有都有唯一的名称; 135.txt - 143.txt)。我想要做的是将这些文件合并到一个大文件中,同时保留并添加单词实例的数量到总数。因此,如果它是两个包含以下数据的文件:

  1500 this            1000 is
  1450 is      and     900  this
  1200 some            800  some
  1000 data            700  else

新文件应包含以下数据:

  2450 is
  2400 this
  2000 some
  1000 data
  700  else

实现这一目标的好方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用awk

执行此操作
awk '{a[$2]+=$1} END {for (i in a) {print a[i],i}}' file1 file2 file3 ... | sort -rn

示例输出:

$ cat f1
1500 this
1450 is
1200 some
1000 data

$ cat f2
1000 is
900 this
800 some
700 else

$ awk '{a[$2]+=$1} END {for (i in a) {print a[i],i}}' f1 f2 | sort -rn
2450 is
2400 this
2000 some
1000 data
700 else

解释 - 这首先循环遍历所有文件,对于每一行,它将第一列的值添加到第二列的数组索引中。处理完所有文件后,将输出生成的数组。