awk: печатать строки, которые НЕ соответствуют шаблонам в файле, глядя на определенный столбец - PullRequest
0 голосов
/ 13 мая 2018

У меня есть idFile:

1006006
1006008
1006011
1007002
......   

и famFile:

1006 1006001 1006016 1006017 1
1006 1006006 1006016 1006017 1
1006 1006007 0       0       2
1006 1006008 1006007 1006006 2
1006 1006010 1006016 1006017 2
1006 1006011 1006016 1006017 1
1006 1006016 0       0       2
1006 1006017 0       0       1
1007 1007001 1007950 1007015 2
1007 1007002 1007014 1007015 2
......

Мне нужно собрать все строки из famFile, где второй столбец не соответствует ни одной из строк в idFile.

Эта команда:

awk 'BEGIN { while(getline <"idFile") id[$0]=1; }
id[$2] ' famFile

возвращает все совпадения:

1006 1006006 1006016 1006017 1
1006 1006008 1006007 1006006 2
1006 1006011 1006016 1006017 1
1007 1007002 1007014 1007015 2
......

Но как мне изменить команду, чтобы получить дополнение совпадений?

1 Ответ

0 голосов
/ 13 мая 2018
$ awk 'NR==FNR{a[$1];next} !($2 in a)' idFile famFile
1006 1006001 1006016 1006017 1
1006 1006007 0       0       2
1006 1006010 1006016 1006017 2
1006 1006016 0       0       2
1006 1006017 0       0       1
1007 1007001 1007950 1007015 2

Разъяснения:

$ awk '
NR==FNR {                  # process the idFile
    a[$1]                  # hash to a 
    next                   # next id
}
!($2 in a)                 # if the second field id is not in a, output record
' idFile famFile           # mind the file order
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...