Я получил подробную статью, как ее реализовать, это поможет http://planetghost.com/forums/drupal/multi-server-setup-image-upload-issue
С awk:
$ awk '!/X/{count++}/X/{print count; count = 0}' input
3
4
1
Увеличивает счетчик для каждой строки, не содержащей X; распечатать и сбросить счетчик строк, содержащих X.
С awk:
$ awk '!/X/{count++}/X/{print count; count = 0}' input
3
4
1
Увеличивает счетчик для каждой строки, не содержащей X; распечатать и сбросить счетчик строк, содержащих X.
С awk:
$ awk '!/X/{count++}/X/{print count; count = 0}' input
3
4
1
Увеличивает счетчик для каждой строки, не содержащей X; распечатать и сбросить счетчик строк, содержащих X.
$ awk '/X/ && prev{print NR-prev-1} /X/{prev=NR}' file
3
4
1
Как это работает:
Awk неявно читает входные файлы по строкам.
/X/ && prev{print NR-prev-1} Для любой строки, содержащей X, и если мы ранее присвоено значение prev, затем распечатайте номер текущей строки, NR, минус prev минус один. /X/{prev=NR} Для любой строки, содержащей X, установите для переменной prev текущий номер строки, NR.Другой простой подход awk, который работает с образцовыми данными OP, и если X не был первым или даже последним или повторным Xs.
awk -v RS='X' 'NF{print NF}' infile
Выше правильное, когда есть только один поле в каждой строке с по умолчанию FS любые пробелы, в противном случае ниже в общем случае пересматривается для подсчета строки. Вы можете ввести свой PATTERN вместо X.
awk -F'\n' -v RS='X' 'NF>2{print NF-2}'
Пример ввода:
X
Y YYY Y
YY
YY Y YY YY Y Y
X
Y Y Y
X
Y
Y
X
X
Выход:
3
1
2
Большинство ответов здесь соответствуют содержимому строки, которая должна учитываться с помощью регулярных выражений, встроенных в программу Awk. Если вам нужно сопоставить строки с контентом, который может содержать специальные символы (либо Awk, либо регулярные выражения), было бы лучше сравнить строки для равенства. Поэтому я предлагаю следующий сценарий Awk как вариант ответа муру:
BEGIN {
count = 0;
}
{
if ($0 == needle) {
if (count) {
print count;
count = 0;
}
} else {
count++;
}
}
Сохранить его как текстовый файл, например. г. count-rows.awk и вызовите его следующим образом:
awk -f count-rows.awk -v needle=X input
Вы можете настроить значение needle по своему вкусу. Преимущество этого метода состоит в том, что вы можете вызывать программу из сценария оболочки с произвольным значением для needle без проблем с экранированием:
awk -f count-rows.awk -v needle="$needle" input
большинство ответов здесь соответствует содержанию линии должны быть подсчитаны, используя регулярные выражения встроены в программу на awk. Если вам нужно, чтобы соответствовать линии с контентом, который может содержать специальные символы (либо awk или регулярных выражений) лучше бы на самом деле сравнение строк на равенство. Поэтому я предлагаю следующий скрипт на awk как вариант ответа Муру по:
BEGIN {
count = 0;
}
{
if ($0 == needle) {
if (count) {
print count;
count = 0;
}
} else {
count++;
}
}
сохранить его в виде текстового файла, электронной. г. count-rows.awk, и вызвать ее следующим образом:
awk -f count-rows.awk -v needle=X input
Вы можете отрегулировать значение [F5], чтобы вашему вкусу. Преимущество этого метода заключается в том, что вы можете вызвать программу из скрипта оболочки с произвольным значением для needle без экранирования вопросы:
awk -f count-rows.awk -v needle="$needle" input
$ awk '/X/ && prev{print NR-prev-1} /X/{prev=NR}' file
3
4
1
Как это работает:
Awk неявно читает входные файлы по строкам.
/X/ && prev{print NR-prev-1} Для любой строки, содержащей X, и если мы ранее присвоено значение prev, затем распечатайте номер текущей строки, NR, минус prev минус один. /X/{prev=NR} Для любой строки, содержащей X, установите для переменной prev текущий номер строки, NR.Другой простой подход awk, который работает с образцовыми данными OP, и если X не был первым или даже последним или повторным Xs.
awk -v RS='X' 'NF{print NF}' infile
Выше правильное, когда есть только один поле в каждой строке с по умолчанию FS любые пробелы, в противном случае ниже в общем случае пересматривается для подсчета строки. Вы можете ввести свой PATTERN вместо X.
awk -F'\n' -v RS='X' 'NF>2{print NF-2}'
Пример ввода:
X
Y YYY Y
YY
YY Y YY YY Y Y
X
Y Y Y
X
Y
Y
X
X
Выход:
3
1
2
Большинство ответов здесь соответствуют содержимому строки, которая должна учитываться с помощью регулярных выражений, встроенных в программу Awk. Если вам нужно сопоставить строки с контентом, который может содержать специальные символы (либо Awk, либо регулярные выражения), было бы лучше сравнить строки для равенства. Поэтому я предлагаю следующий сценарий Awk как вариант ответа муру:
BEGIN {
count = 0;
}
{
if ($0 == needle) {
if (count) {
print count;
count = 0;
}
} else {
count++;
}
}
Сохранить его как текстовый файл, например. г. count-rows.awk и вызовите его следующим образом:
awk -f count-rows.awk -v needle=X input
Вы можете настроить значение needle по своему вкусу. Преимущество этого метода состоит в том, что вы можете вызывать программу из сценария оболочки с произвольным значением для needle без проблем с экранированием:
awk -f count-rows.awk -v needle="$needle" input
$ awk '/X/ && prev{print NR-prev-1} /X/{prev=NR}' file
3
4
1
Как это работает:
Awk неявно читает входные файлы по строкам.
/X/ && prev{print NR-prev-1} Для любой строки, содержащей X, и если мы ранее присвоено значение prev, затем распечатайте номер текущей строки, NR, минус prev минус один. /X/{prev=NR} Для любой строки, содержащей X, установите для переменной prev текущий номер строки, NR.Другой простой подход awk, который работает с образцовыми данными OP, и если X не был первым или даже последним или повторным Xs.
awk -v RS='X' 'NF{print NF}' infile
Выше правильное, когда есть только один поле в каждой строке с по умолчанию FS любые пробелы, в противном случае ниже в общем случае пересматривается для подсчета строки. Вы можете ввести свой PATTERN вместо X.
awk -F'\n' -v RS='X' 'NF>2{print NF-2}'
Пример ввода:
X
Y YYY Y
YY
YY Y YY YY Y Y
X
Y Y Y
X
Y
Y
X
X
Выход:
3
1
2