код awk для вывода строк с соответствующими полями, но без вывода - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь вывести строки в одном файле fileB, которые соответствуют параметрам в другом файле fileA, но моя попытка ничего не выводит.

fileA:

chr1    7237    7238
chr1    7637    7637
chr1    7908    7908
chr1    8045    8045
chr1    8329    8329
chr1    8358    8358
chr1    8375    8375
chr1    8381    8381

fileB: (обратите внимание, что в пятой строке есть дополнительный столбец)

130 chr1    7237    7238    0k9imgkt
135 chr1    7637    7637    b9gko
138 chr1    7908    7908    kob9g
139 chr1    8045    8045    34e5rg  4r
151 chr1    8329    8329    b
151 chr1    8346    8346    345y46htyh
151 chr1    8346    8346    76jtuj
152 chr1    8358    8358    asfge

Мой код:

awk 'NR==FNR{a[$1,$2,$3];next}($2,$3,$4) in a{print $0}' fileA fileB

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

130 chr1    7237    7238    0k9imgkt
135 chr1    7637    7637    b9gko
138 chr1    7908    7908    kob9g
139 chr1    8045    8045    34e5rg  4r
151 chr1    8329    8329    b
152 chr1    8358    8358    asfge

Фактическая выработка:


Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Это происходит, когда входные файлы имеют окончания строки Windows (т.е. \r\n).Исправьте ваши входные файлы, используя инструмент dos2unix, и ваша команда будет работать.

dos2unix fileA fileB

Или, если вы используете gawk или mawk, установите разделитель записей на \r\n:

awk -v RS='\r\n' ...
1 голос
/ 03 апреля 2019

Вы можете попробовать с tr и grep:

< fileA tr -d '\r' | grep -f - fileB
...