Я много искал свою проблему и тестировал различные решения, но ни один из них не работает. Я даже использовал ту же команду заранее с успехом, но теперь мне не удается получить желаемый результат.awk - если значения совпадают, тогда распечатайте файл1 и файл 2
У меня есть file1
AAA;123456789A
BBB;123456789B
CCC;123456789C
И file2
1;2;3;CCC;pippo
1;2;3;AAA;pippo
1;2;3;BBB;pippo
1;2;3;*;pippo
Мой желаемый результат заключается в следующем:
1;2;3;CCC;pippo;CCC;123456789C
1;2;3;AAA;pippo;AAA;123456789A
1;2;3;BBB;pippo;BBB;123456789B
Я попытался с помощью этой команды:
awk -F";" -v OFS=";" 'FNR == NR {a[$10]=$1; b[$20]=$2; next}($10 in a){ if(match(a[$10],$4)) print $0,a[$10],b[$20]}' file1 file2
Но я получаю этот выход (только один ввод, даже с большими файлами):
1;2;3;CCC;pippo;CCC;123456789C
Что я делаю неправильно? Если он управляет одним, он должен для всех остальных. Почему этого не происходит? Также почему, если я установил a[$1]=$1
, он не работает?
Благодарим вас за помощь! Если возможно, вы могли бы объяснить ответ? Поэтому в следующий раз мне не придется просить о помощи!
EDIT: Извините, я не упомянул (так как хотел сохранить пример минимальным), что в файле2 некоторые поля просто «*». И я хотел бы добавить, что «else не соответствует чему-то».
Так что вы хотите, чтобы соответствовать 1-е поле в file1 с 4-го поля в file2? Кроме того, почему вы выбираете поля '$ 10' и' $ 20', если их всего 5 или 6? – fedorqui
'arr' не определен. –
@CasimiretHippolyte это опечатка, 'arr' должно быть' a'. @fedorqui Я просто использовал для значений больше 4. Но почему я не могу использовать $ 1 и $ 2 моего массива 'a'? Разве это не пусто? –