Сравните строки из двух файлов и распечатайте только столбец, соответствующий - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в использовании AWK. Я был бы признателен, если бы вы мне помогли.

У меня два файла

file1

1   2   3   4   ok  I
5   36  5   6   no  II
58  9   6   4   no  V
4   3   2   1   ok  III

file2

6   9   8   6
58  6   5   4
4   3   2   1
1   2   3   4

Я хочу найти каждая строка из file2 в файле 1 и, если она соответствует, напечатать столбцы 5 и 6 из file1

Ожидаемый результат

ok III
ok I

Ответы [ 2 ]

1 голос
/ 04 августа 2020
$ cat tst.awk
{ key = $1 FS $2 FS $3 FS $4 }
NR == FNR {
    map[key] = $5 OFS $6
    next
}
key in map { print map[key] }

.

$ awk -f tst.awk file1 file2
ok III
ok I
1 голос
/ 04 августа 2020

Мое решение - создать файл с вызовом match.awk:

FNR == NR {
    found[$1 "/" $2 "/" $3 "/" $4] = 1
}

FNR != NR && $1 "/" $2 "/" $3 "/" $4 in found {
    print $5, $6
}

Вызвать его:

awk -f match.awk file2 file1

Обсуждение

  • Обратите внимание, что в командной строке выше мы сначала будем go через file2. В скрипте обработка file2 находится в первом блоке, где FNR == NR
  • Если мы встретим строки в file2, мы создадим ключ. Например, если строка содержит 58 6 5 4, то ключ будет 58/6/5/4. С помощью этого ключа мы помечаем массив found 1 (истина)
  • Второй блок говорит: «Мы видим строку в файле1, и эта строка была найдена в файле2. Если это так , распечатайте результат.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...