Не могли бы вы попробовать следующее (я написал это на мобильном телефоне, поэтому не смог проверить это).
awk -v fields="1,3" '
BEGIN{
FS=OFS=","
num=split(fields,array,",")
for(j=1;j<=num;j++){
a[array[j]]
}
}
{
for(i=1;i<=NF;i++){
if(i in a){
count[$i]++
}
}
}
END{
for(h in count){
print h,count[h]
}
}
' Input_file
Я считаю, что это должно работать и для анализа нескольких Input_files. При необходимости вы можете попробовать передать ему несколько файлов.
Объяснение: Следующее предназначено только для пояснения.
-v fields="1,3"
создавая переменную с именем fields, значение которой определяется пользователем, она должна быть разделена запятыми, для примера, который я взял 1 и 3, вы можете сохранить его в соответствии с вашими потребностями.
BEGIN{......}
здесь начинается раздел BEGIN, где упоминается разделитель полей и разделитель полей вывода в виде запятой для всех строк файла Input_file. Затем, используя split, я разделяю переменные поля на массив с именем array, разделителем которого является запятая. Переменная num имеет переменную длины полей. В главной роли цикл от 1 до до значения num. В нем создается массив с именем a, индекс которого является значением массива, индекс которого является переменной j value.
MAIN Раздел: теперь запускается цикл for, который пересекает все поля строк. Затем он проверяет, поступает ли какой-либо номер поля в массив с именем a, который мы создали в разделе BEGIN; если да, то он создает массив с именем count с индексом текущего столбца +, тоже считая его. Что нам нужно в соответствии с требованием OP.
Наконец, в разделе END
этой программы, проходящем через счетчик массивов и печатаем его индексы с их счетами.