Команда Awk для проверки наличия конкретной строки в файле, если она есть, возвращает имена столбцов, в которых эта строка присутствует - PullRequest
0 голосов
/ 22 января 2020

Используя следующую команду awk, я могу проверить, присутствует ли конкретная строка в файле или нет.

grep -R "statistics" <Filename>

Но вывод, который я ищу - мне нужно выяснить столбцы, в которых присутствует эта строка. Есть ли способ расширить эту команду, чтобы она могла возвращать мне имена столбцов, где присутствует эта строка.

Я попробовал следующую команду, но не получаю желаемый вывод

awk '{ for (i=1; i<=NF; ++i) { if ($i = "statistics") print i } }' <filename>

В моем входном файле около 1500 столбцов. Это разделенный табуляцией файл с включенными заголовками столбцов.

Оцените любые рекомендации.

1 Ответ

2 голосов
/ 22 января 2020

1-е решение: Не могли бы вы попробовать следующее.

awk '
FNR==1{
  for(i=1;i<=NF;i++){
    array[i]=$i
  }
}
{
  for(i=1;i<=NF;i++){
    if($i=="statistics"){
      print "Line number is: " FNR ", column number is: "i ",column heading is:" array[i]
    }
  }
}
' Input_file

2-е решение: Использование переменная, которая будет иметь значение строки, которую мы хотим найти.

awk -v word="statistics" '
FNR==1{
  for(i=1;i<=NF;i++){
    array[i]=$i
  }
}
{
  for(i=1;i<=NF;i++){
    if($i==word){
       print "Line number is: " FNR ", column number is: "i",column heading is:" array[i]
    }
  }
}' Input_file

Над обоими решениями будет напечатан номер строки вместе с номером столбца.



3-е решение: Чтобы напечатать только номер столбца, попробуйте следующее:

awk 'FNR==1{for(i=1;i<=NF;i++){array[i]=$i}} {for(i=1;i<=NF;i++){if($i=="statistics"){print i,array[i]}}}' Input_file

4-е решение: вариант 3-го решения с переменный подход.

awk -v word="statistics" 'FNR==1{for(i=1;i<=NF;i++){array[i]=$i}}{for(i=1;i<=NF;i++){if($i==word){print i,array[i]}}}' Input_file

ПРИМЕЧАНИЕ:

  • 1-е и 2-е решение даст номер строки, номер столбца и имя заголовка.
  • 3-е и 4-е решение дадут номер столбца и имя заголовка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...