Распечатайте подобранный и несопоставленный столбец с шаблоном

У меня есть два файла f1.txt и f2.txt. Я должен сравнить оба файла и распечатать соответствие coloums, также печатают несопоставленные столбцы с "не найденный" шаблон.

f1:

hari:1.2.3.4/32
abc:3.4.5.6/24
bcd:8.9.10.11/34

f2:

1.2.3.4/32
3.4.5.6/24
8.9.10.11/34
10.12.34.0/22
1.4.5.7/34

желаемый Вывод:

hari:1.2.3.4/32
abc:3.4.5.6/24
bcd:8.9.10.11/34
not found:10.12.34.0/22
not found:1.4.5.7/34

мог любой помогать получить желаемый вывод.

Спасибо

2
задан 8 September 2016 в 17:46

2 ответа

Вы могли использовать awk:

$ awk -F':' -vOFS=':' 'NR==FNR{a[$2]=$1;next}{print $1 in a?a[$1]:"not found",$1}' file1 file2
hari:1.2.3.4/32
abc:3.4.5.6/24
bcd:8.9.10.11/34
not found:10.12.34.0/22
not found:1.4.5.7/34

В более читаемом формате:

awk -F':' -vOFS=':' 'NR == FNR { # For the first file (file1)
                        a[$2] = $1 # store the first token in an array 
                                   # using the second token as the key
                        next       # skip to the next record
                     }
                     {  # For all lines of file 2
                        print $1 in a ? a[$1] : "not found" , $1 # print the desired result
                     }' file1 file2
4
ответ дан 2 December 2019 в 01:32

Хотя Ваш f2, кажется, строго не заказан, join, кажется, работает <глоток> 1 :

$ join -t\: -12 -21 -a2 -e 'not found' -o1.1,0 f1 f2
hari:1.2.3.4/32
abc:3.4.5.6/24
bcd:8.9.10.11/34
not found:10.12.34.0/22
not found:1.4.5.7/34

С реальными данными, Вы, возможно, должны предварительно отсортировать:

$ join -t\: -12 -21 -a2 -e 'not found' -o1.1,0 <(sort -t\: -k2,2 f1) <(sort -t\: -k1,1 f2) | sort
abc:3.4.5.6/24
bcd:8.9.10.11/34
hari:1.2.3.4/32
not found:10.12.34.0/22
not found:1.4.5.7/34


<глоток> 1 , возможно, потому что matchable строки отсортированы?

4
ответ дан 2 December 2019 в 01:32

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

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