Awk объединяет файлы с повторяющимися строками - PullRequest
2 голосов
/ 24 апреля 2020

Прежде всего, извините за мой Engli sh (это мой первый раз на StackOverflow). Я пытаюсь смешать два файла с awk, и я попробовал следующее:

Файл 1:

49:6:2:8:5
46:8:3:6:15
47:8:5:6:104
6:3:10:8:3
48:6:1:10:2

Файл 2:

1:admin:admin:00000000A:admin@a:admin:admin
3:b:b:66666666b:b@b.b:bb:bb
4:w:w:22222222w:w@w.w:ww:ww
5:r:r:44444444r:r@r.r:rrr:rrr
6:ga:ga:55555555g:g@g.g:gg:gg
7:e:e:33333333e:e@e.e:ee:ee
8:u:u:77777777u:u@u.u:uu:uu
9:james:lopez:12312312a:jose@gmail.com:jose:perez
10:luois:asd:12312312a:jj@j.j:ju:an

Вывод:

6:3:10:8:3:b:b
48:6:11:10:2:ga:ga
47:8:5:6:104:u:u

Используемая команда:

awk -v OFS=: 'NR==FNR { a[$2]=$0; next }$1 in a { print a[$1],$2,$3}' FS=: File1 File2

Ожидаемый результат: в первом файле столбцы 2 и 4 являются идентификаторами второго файла, а во втором файле я добавил столбцы 2 и 3. Некоторые должны быть в двух или более рядах.

6:3:10:8:3:b:b:u:u
48:6:11:10:2:ga:ga:admin:admin
47:8:5:6:104:u:u:ga:ga
49:6:2:8:5:ga:ga:u:u
46:8:3:6:15:u:u:ga:ga

Спасибо всем.

1 Ответ

3 голосов
/ 24 апреля 2020
$ awk -F: -v OFS=: 'NR==FNR{a[$1]=$2 OFS $3; next} {print $0, a[$2], a[$4]}' f2 f1
49:6:2:8:5:ga:ga:u:u
46:8:3:6:15:u:u:ga:ga
47:8:5:6:104:u:u:ga:ga
6:3:10:8:3:b:b:u:u
48:6:1:10:2:ga:ga:luois:asd

Второй файл читается первым для создания сопоставления. Первое поле используется в качестве ключа, а содержимое второго и третьего полей сохраняется с OFS между ними в качестве разделителя. Когда первый файл будет прочитан, напечатайте содержимое строки, а затем получите содержимое на основе 2-го и 4-го полей в качестве ключа из массива.

Обратите внимание, что ожидаемый результат, показанный в вопросе, не совпадает с 48:6:1:10... Возможно, вы прочитали 10 как 1 или что-то еще.

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