Массив с двумя входными файлами awk

У меня есть два файла: один с NF=7 другой – NF=47

Мне нужно проверить количество вхождений $2 в файл с NF=7 . Если count <=2 , мне нужно сделать массив из того же файла, который содержит arr1[$1]=$1

Для этого действия я использовал следующий код:

 awk -F"," '{if(NF==7){arr[$2]++}}END{for(i in a){if(arr[i]<=2){print $0}}}' 

Для действия второго файла мне нужно сопоставить $1 с arr[$1]=$1 взятым из первого файла с $1 из второго файла.

Ниже приведен пример:

File1:

 1,111,,,,,, 2,111,,,,,, 3,100,,,,,, 4,111,,,,,, 

File2:

 1,799,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 2,899,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 

Вывод:

 3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 

One Solution collect form web for “Массив с двумя входными файлами awk”

Вы можете сравнить NR с FNR чтобы различать обработку первого или последующих файлов. Это связано с тем, что FNR сбрасывается на каждый файл, а NR – это текущий подсчет. Поэтому только при обработке первого файла будет выполнено условие NR==FNR .

Чтобы обработать «более короткий» файл, который должен быть первым …

 awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}...' 

Затем, чтобы обработать «более длинный» файл, чтобы он печатался, когда ваше условие удовлетворяет …

 awk -F, 'NR!=FNR&&counter[mapper[$1]]<=2' 

Объединение обоих:

 awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}NR!=FNR&&counter[mapper[$1]]<=2' 

По умолчанию awk печатает всю строку, когда критерии выбора совпадают, поэтому просто указать NR!=FNR&&counter[mapper[$1]]<=2 будет достаточно.

  • Найдите каждую строку, соответствующую шаблону, но напечатайте только строку над ней
  • После небольшого изменения кода «awk» печатает заголовок и пустые строки (не повторяется заголовок)
  • Команда для удаления первого N числа строк на входе
  • Преобразование IP-адреса в координаты с использованием базы данных
  • Как оптимизировать скрипт с помощью NF и цикла for
  • Как вы указываете количество строк каждого файла в каталоге в человекообразном формате.
  • Как настроить выбор awk на содержимое поля 1?
  • Как сравнивать числа в последовательных строках в файле с помощью awk
  • Создать PHP массив из букв
  • Добавить строку в файл конфигурации из сценария bash?
  • Дублируйте, с небольшими изменениями, несколько строк в текстовом файле
  • Linux и Unix - лучшая ОС в мире.