У меня есть два файла 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
мог любой помогать получить желаемый вывод.
Спасибо
Вы могли использовать 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
Хотя Ваш 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 строки отсортированы?