Вид и слияние 2 файла без дублирующихся строк, на основе первого столбца

У меня есть файл со всем тестовым именем:

$ cat all_tests.txt
test1
test2
test3
test4
test5
test6

И другой файл, содержащий тестовые имена и связанный результат:

$ cat completed_tests.txt
test1 Passed
test3 Failed
test5 Passed
test6 Passed

То, как создать новый файл, содержащий весь тест, называет со связанным результатом без дубликатов?

Если я выполняюсь:

sort all_tests.txt completed_tests.txt

Вывод содержит дубликаты:

test1 
test1 Passed
test2
test3 
test3 Failed
test4
test5 
test5 Passed
test6 
test6 Passed

Желаемый вывод:

test1 Passed
test2
test3 Failed
test4
test5 Passed
test6 Passed
12
задан 26 September 2017 в 12:52

3 ответа

Похоже, что вы можете добиться этого с помощью join очень легко, если оба файла отсортированы.

$ join -a 1 all_test.txt completed_test.txt
test1 Passed
test2
test3 Failed
test4
test5 Passed
test6 Passed

-a 1 означает печать строк из файла 1, к которым ничего не было присоединено.

Если ваши файлы еще не отсортированы, вы можете использовать это (спасибо terdon!):

join -a 1  <(sort all_tests.txt) <(sort completed_tests.txt )
17
ответ дан 23 November 2019 в 03:31

Правильный инструмент здесь join, как предложил @Zanna, но здесь awk подход:

$ awk 'NR==FNR{a[$1]=$2; next}{print $1,a[$1]}' completed_tests.txt all_tests.txt 
test1 Passed
test2 
test3 Failed
test4 
test5 Passed
test6 Passed
7
ответ дан 23 November 2019 в 03:31

Perl

Эффективно, это - порт ответа terdon:

$ perl -lane '$t+=1; $h{$F[0]}=$F[1] if $.==$t; print $F[0]," ",$h{$F[0]} if $t!=$.;$.=0 if eof' completed_tests.txt all_tests.txt          
test1 Passed
test2 
test3 Failed
test4 
test5 Passed
test6 Passed

Это работает путем создания хеша пар тестового состояния от completed_test.txt и затем поиск строк в all_tests.txt в том хеше. $t переменная общих строк обрабатывается из каждого файла и $. это сбрасывается на достигающий конец файла, позвольте нам отслеживать, которых в настоящее время читается файл.

2
ответ дан 23 November 2019 в 03:31

Другие вопросы по тегам:

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