Команда Awk для проверки наличия определенной строки в файле, если присутствует возвращает имена столбцов, в которых эта строка присутствует
Используя следующую команду awk, я могу проверить, присутствует ли определенная строка в файле или нет.
grep -R "statistics" <Filename>
Но вывод, который я ищу, заключается в том, что мне нужно найти столбцы, в которых присутствует эта строка. Есть ли способ расширить эту команду, чтобы она могла возвращать мне имена столбцов, в которых присутствует эта строка.
Я попробовал следующую команду, но не получаю желаемого результата
awk '{ for (i=1; i<=NF; ++i) { if ($i = "statistics") print i } }' <filename>
В моем входном файле около 1500 столбцов. Это разделенный вкладками файл с включенными заголовками столбцов.
Ценю любое руководство.



Ответы - Команда 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

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-е решения дадут номер столбца и название заголовка.


\=' treated as plain
='

=
). Вы также можете открыть новый поток с вопросом и дайте мне знать, тогда, будет проверять полный вопрос там тогда.