Как найти строки с одним и тем же столбцом в разных файлах и распечатать конкретный столбец и добавить их в исходный файл? [закрыто]

0
11.09.2018, 13:36
2 ответа

Невозможно с помощью grep, но выполнимо с помощью awk:

$ awk 'NR==1   {print $0;next}              # Print header
       NR==FNR {a[$1]=$2;next}              # collect data from file1.txt
               { if($5 in a)                # If column L match
                 { print($5,a[$5],$1,$7) }  # print columns (H and N)
               }
      ' file1.txt file2.txt

В виде одного -вкладыша:

$ awk 'NR==1{print $0;next} NR==FNR{a[$1]=$2;next} {if($5 in a){print($5,a[$5],$1,$7)}}' file1.txt file2.txt

A B C D
5 8 4 8
4 9 7 7

Порядок указан в том порядке, в котором поля отображаются в file2.txt.
Если вам нужна сортировка, добавьте шаг сортировки.

0
28.01.2020, 04:13

Я бы использовал пошаговый подход,объяснить

  1. Сортировка файла 1

    sort file1.txt > file1.sorted.txt

  2. Извлеките интересующую часть из файла2 (и тоже отсортируйте)

    awk '{print $5,$1,$7}' file2.txt | sort > file2_of_interest.txt

  3. Объединить два выхода на основе ключа, который является столбцом 1 в обоих файлах

    join file1.sorted.txt file2_of_interest.txt -1 1 -2 1

Вы можете комбинировать эти три шага, используя косвенное обращение -, но в конце вам нужно будет выполнить синтаксический анализ хотя бы одного файла. Также могут возникнуть опасения в случаях, когда столбец L в файле file2.txt не уникален и/или столбец 1 в файле file1.txt не уникален -, вам нужно будет разрешить их, вставив свою бизнес-логику, чтобы сделать ключ уникальным.

0
28.01.2020, 04:13

Теги

Похожие вопросы