Удалите строки из файлов с разделением табуляцией на основе общего столбца с другим файлом

Хорошо, кажется, что это должно быть передано как третий аргумент KEYSYM:

xmodmap -e "keycode 47 = colon semicolon Cyrillic_ZHE"
3
06.08.2014, 01:39
2 ответа

Если я хорошо понял твой вопрос, то это звучит как типичный join ("Объединить строки на общем поле") используйте случай :

join --header -j 4 -t $'\t' file1.txt file2.txt

Вы получаете 7 столбцов для каждой совпадающей строки.

Вот что я получаю (для слегка измененных данных смотрите ниже):

Column_4    Column_1    Column_2    Column_3    Column_1    Column_2    Column_3
D2  A2  B2  C2  Aa2 Bb2 Cc2
D3  A3  B3  C3  Aa3 Bb3 Cc3
D8  A8  B8  C8  Aa8 Bb8 Cc8

(извините, что вкладки здесь не очень красиво отображаются):

Column_4 - это ваше значение совпадения, и оно приходит первым. Вы можете сравнить значения других столбцов, как вы просили в своей цели.

Если вам нужны только вторые столбцы таблицы, используйте:

join --header  -j 4 -o 2.1,2.2,2.3,2.4 -t $'\t' file1.txt file2.txt 

Однако, join ожидает, что его входные файлы будут отсортированы, поэтому вам нужно передать их через сортировку и отсортировать их на 4-м поле сначала:

join --header  -j 4 -o 2.1,2.2,2.3,2.4 -t $'\t' <(sort -k4 file1.txt) <(sort -k 4 file2.txt)

Для лучшего демо-версии я предлагаю немного другие исходные файлы (хм, это было до того, как вы их редактировали)

file1:

Column_1    Column_2    Column_3    Column_4
A0  B0  C0  D0
A2  B2  C2  D2
A3  B3  C3  D3
A8  B8  C8  D8

file2:

Column_1    Column_2    Column_3    Column_4
Aa1 Bb1 Cc1 D1
Aa2 Bb2 Cc2 D2
Aa3 Bb3 Cc3 D3
Aa4 Bb4 Cc4 D4
Aa5 Bb5 Cc5 D5
Aa6 Bb6 Cc6 D6
Aa7 Bb7 Cc7 D7
Aa8 Bb8 Cc8 D8
Aa9 Bb9 Cc9 D9
4
27.01.2020, 21:14

Решение awk:

$ awk -F"\t" 'FNR==NR{a[$4];next}; $4 in a' OFS="\t" file1 file2
Column_1    Column_2    Column_3    Column_4
Aa2          Bb2          Cc2          D2
2
27.01.2020, 21:14

Теги

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