awk для фильтрации данных одного файла с использованием данных другого файла - PullRequest
0 голосов
/ 25 июня 2018

Это расширение вопроса ( Awk: использование файла для фильтрации другого (out.tr) )

awk 'FNR==NR { a[$NF]; next } $NF in a' other main    

Я полностью понимаю ($ NF в a), т.е.искать последний столбец MainFile в массиве a.Но что хранится в массиве [$ NF], это последний столбец другого файла или полный файл.

У меня есть другой файл (через запятую), и я хочу использовать 2-й столбец для фильтрации данных основного файла.Как команда узнает, что [$ 2] хранит 2-й столбец другого файла, который должен храниться в массиве и будет использоваться для фильтрации основного файла.

Например, если у меня есть MainFile, который содержит данныекак

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
21-Jun|0|156000|2327
21-Jun|1|156000|500000
21-Jun|0|250000|15000
20-Jun|0|251000|15000
20-Jun|0|100000|423423
18-Jun|1|102000|30000
19-Jun|0|102000|1500

Другой файл (id1), который используется для фильтрации MainFile (Id)

date,id1,id2,id3
21Jun,123000,5665,34234
21Jun,102000,23654,324
19Jun,251000,1231,123123

Результат выше должен быть

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

После awk может помочь вам в том же.

awk 'BEGIN{print "Date|par|Id|Number"} FNR==NR{a[$2];next} ($3 in a)' FS="," id1 FS="|" mainfile

Вывод будет следующим.

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500
0 голосов
/ 25 июня 2018

это должно работать, но так как у вас нет соответствующих идентификаторов в 3-х столбцах, ничего не печатается с входными файлами, которые вы разместили

$ awk -F, 'NR==FNR{a[$3];next} $3 in a' filter FS='|' main

возможно, вы имели в виду 2-й столбец фильтра (поле id1), затем измените на

$ awk -F, 'NR==FNR{a[$2];next} $3 in a' filter FS='|' main

, вы получите

21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500

возможно, чтобы добавить заголовок

$ awk -F, 'NR==FNR{a[$2];next} FNR==1 || $3 in a' filter FS='|' main

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...