UNIX; объединить два файла с общими словами - PullRequest
0 голосов
/ 05 мая 2020

У меня два файла; file1.txt и file2.txt. И хотите объединить их, например:

name1 note1
name2 note2
name3 note3

file1.txt

name2 note2_2
name3 note2_3
name1 note2_1

file2.txt

name1 note1 note2_1
name2 note2 note2_2
name3 note3 note2_3

result.txt

I сделал код, но я не уверен, как его добавить.

#!/bin/bash

cut -d' ' -f1 file1.txt > names1.txt

while read -a rows
do
    for i in "${rows[@]}"
    do
    grep "$i" | cut -f 2- -d ' ' file2.txt > new.txt
    done
    *here I should append it (I think)*
done < names1.txt

Я знаю, что sed можно использовать для добавления like; sed 's/$/ *the first word of each line from new.txt*/' file1.txt Или используя paste file1.txt new.txt > fileresults.txt

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

join(1) сделано для такого рода вещей:

join file1.txt <(sort file2.txt) > result.txt

Требуется, чтобы файлы были отсортированы по полю соединения (по умолчанию первый столбец), поэтому, если ваш реальный file1 не отсортирован, отсортируйте его так же, как file2 в приведенном выше примере.

0 голосов
/ 05 мая 2020

Вы можете использовать:

awk '{print $2}' file2.txt | xargs -I {} awk '$0=$0" {}"' file1.txt
  • awk '{print $2}' file2 читает второй столбец file2.
  • | xargs -I {} вставляет стандартный вывод первого awk в следующее место, где появляется {}. Вы также можете выбрать другие элементы в качестве заполнителя.
  • awk '$0=$0" {}"' file1 считывает все столбцы file1 и помещает аргумент xargs за пробелом.
...