Мне нужна команда Awk, с помощью которой я могу искать в большом файле столбцы, содержащие числа как меньше 3 , так и больше 5 . Также необходимо пропустить первый столбец.

Например для следующего файла

   1 2 6 2
   2 1 7 3
   3 2 5 4
   4 2 8 7
   5 2 6 8
   6 1 9 9

В этом случае соответствует только столбец 4, так как это единственный столбец со значениями выше 5 и ниже 3 (за исключением столбца 1, который мы пропускаем).

В настоящее время у меня есть такой код:

 awk '{for (i=2; i<=NF; i++) {if ($i < 3 && $i > 5) {print i}}}'

Но при этом за раз читается только одна строка (поэтому совпадений не выполняется). Я хочу выполнить поиск по всем строкам, но не могу понять, как это делается.

В идеале на выходе должен быть просто номер столбца. В этом примере просто «4».

Большое спасибо.

awk
1
birac 9 Июн 2018 в 20:55

1 ответ

Лучший ответ

Не могли бы вы попробовать подписаться и сообщить мне, поможет ли это вам.

awk '{for(i=1;i<=NF;i++){if($i<3){col[i]++};if($i>5){col1[i]++}}} END{for(j in col){if(col[j]>=1 && col1[j]>=1){print j}}}'  Input_file

Если вы хотите начать поиск со второго столбца, измените i=1 на i=2 в приведенном выше коде.

РЕДАКТИРОВАТЬ: . Теперь добавьте форму решения не с одним вкладышем.

awk '
{
  for(i=1;i<=NF;i++){
    if($i<3)                   {  col[i]++ };
    if($i>5)                   {  col1[i]++}}
}
END{
  for(j in col){
    if(col[j]>=1 && col1[j]>=1){  print j  }}
}'  Input_file
1
RavinderSingh13 9 Июн 2018 в 18:22