Команда Awk для проверки наличия определенной строки в файле, если присутствует возвращает имена столбцов, в которых эта строка присутствует


Команда Awk для проверки наличия определенной строки в файле, если присутствует возвращает имена столбцов, в которых эта строка присутствует

22.01.2020 01:32:58 Просмотров 96 Источник

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

grep -R "statistics" <Filename>

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

Я попробовал следующую команду, но не получаю желаемого результата

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

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

Ценю любое руководство.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret#comment105848169_59857688
Извините, но StackOverflow работает не так. Вопросы формы "я хочу сделать X, пожалуйста, дайте мне советы и / или пример кода" считаются не относящимися к теме. Пожалуйста, посетите справочный центр и прочитайте, Как спросить , и особенно прочитайте, почему “Может ли кто-то помочь мне?” это не настоящий вопрос?
https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret#comment105848739_59857688
Кроме того, ваш вопрос действительно требует от вас большего внимания. Мы не знаем, как выглядит ваш файл, каковы разделители полей, где находятся заголовки столбцов, есть ли строки комментариев в вашем файле и т. д... В настоящее время мы бы дали ответы, которые являются просто погоней за дикими гусями, чтобы помочь вам. Нынешний ответ уже отражает это. Я могу придумать 20 вариантов входных файлов, которые будут соответствовать вашему вопросу, но сделают ответ недействительным.
https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret#comment105849418_59857688
Спасибо за обратную связь. Будем заботиться в будущем. В настоящее время вопрос решен и приняли нижеприведенный ответ. Как только я получу время, обновлю вопрос с деталями, упомянутыми вами.

Ответы - Команда Awk для проверки наличия определенной строки в файле, если присутствует возвращает имена столбцов, в которых эта строка присутствует / Awk command to check if a particular string is present in a file, if present return the column names where this string is present

Является ответом!
RavinderSingh13

22.01.2020 01:35:26

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-е решения дадут номер столбца и название заголовка.
https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret/59857730#comment105861440_59857730
Спасибо @RavinderSingh13 за ваши ответы. Это действительно очень помогло, и я смог продвинуться вперед в своем анализе. Цените свое время в решении моего вопроса (даже если он был наполовину испечен) и не тратьте время на то, чтобы указывать на ошибки в моем вопросе, в отличие от других.
https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret/59857730#comment105892105_59857730
Есть идеи, как избежать " = " в команде awk? обратная косая черта не работает. if ($i== " статистика="). Мне нужно избежать " = " после ключевого слова statistics. Получите это предупреждение при использовании обратной косой черты-awk: warning: escape sequence \=' treated as plain ='
https://stackoverflow.com/questions/59857688/awk-command-to-check-if-a-particular-string-is-present-in-a-file-if-present-ret/59857730#comment105917570_59857730
@Shash, вам не нужно убегать от этого, это не имеет особого значения( =). Вы также можете открыть новый поток с вопросом и дайте мне знать, тогда, будет проверять полный вопрос там тогда.
Помочь в развитии проекта:
Закрыть X