как найти несколько шаблонов в файле - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть два файла, file1.csv и file2.txt.

file1 содержит:

192.1.1.1,1,2,3,9,13,15
192.1.1.2,2,3,9,13
192.1.1.3,3,9,15

file2 содержит:

1,2,3=a
9,13=b

Порядок нематерия т.е. 1,2,3 = а, а также 3,1,2 = а.важно только наличие этих цифр.Первый столбец в моем file1.csv состоит из IP-адресов.

Я хочу, чтобы мой скрипт искал числовые шаблоны, перечисленные в file2.txt в file1.csv, и, если они присутствуют, создайте третий файл стекст присутствует после.

Выходной файл должен выглядеть следующим образом:

192.1.1.1,a,b
192.1.1.2,b
192.1.1.3,none

Я попытался использовать команду awk для этого.Однако это работает только в случае, если есть 2 записи, такие как 2,a 1,b и т. Д. Я не понимаю, как поступить, когда мне нужно найти комбинацию чисел.

1 Ответ

0 голосов
/ 30 ноября 2018

не ясно, вы хотите проверить значения в порядке, который я предполагаю

$ awk -F= 'NR==FNR {a[$1]=$2; next} 
                   {for(k in a) if($0 FS ~ FS k FS) v=v FS a[k]; 
                    if(v) print $1 v; 
                    else print $1 FS "none"; v=""}' file2 FS=, file1

192.1.1.1,a,b
192.1.1.2,b
192.1.1.3,none

версия, которая не зависит от указанного порядка, немного длиннее

$ awk -F= 'NR==FNR {a[$1]=$2; next} 
                   {for(k in a) 
                      {n=split(k,t,","); nm=0; 
                       for(i=1;i<=n;i++) if($0 FS !~ FS t[i] FS) nm=1;
                       if(!nm) v=v FS a[k]} 
                       if(v) print $1 v; 
                       else print $1 FS "none"; v=""}' file2 FS=, file1

192.1.1.1,a,b
192.1.1.2,b
192.1.1.3,none
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...