объединить два значения, идентифицированные именем из двух файлов - PullRequest
1 голос
/ 24 марта 2012

ab.txt

30 abcd
45 sadsad

ac.txt

50 ab
430 sadsad

как я могу присоединиться к ним, чтобы я мог получить

abc.txt

30 abcd
50 ab
475 sadsad

Строки во втором столбце уникальны, хотя

Я пытался читать построчно из первого текстового файла, читать строку и искать ее с помощью grep во втором файле, а затем получать из нее число, таким же образом читая построчно из второго файла и получая строку, которая не является во первых

но этот процесс слишком утомителен и худший из возможных способов, какая-нибудь хорошая процедура, делающая это с объединением легко?

1 Ответ

4 голосов
/ 24 марта 2012

Это будет работать с GNU awk:

awk '{ sum[$2] += $1 } END { for (name in sum) print sum[name] " " name }' a b |
  sort -n

Пояснение:

Поскольку каждая строка читается из файлов, переменные $1 и $2 содержат первое и второе поля (то есть значение и строку). Ассоциативный массив sum использует строки в качестве своих индексов, поэтому он накапливает значения, связанные с каждой строкой. Затем в конце ввода (после прочтения последнего файла) он просматривает name каждой строки, являющейся индексом в sum, печатая ее сумму и имя. Наконец, он сортирует выходные данные численно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...