На странице руководства для fgrep
-m 500
поясняется, что это означает «остановить после сопоставления 500 строк». -C 0
не показывает никаких строк контекста, что является значением по умолчанию.
Не имея возможности видеть, как вы вызываете fgrep
, я бы предположил, что это может быть одно приближение:
fgrep ... | head -500
Этот сценарий bash / awk будет эмулировать некоторые ограниченные случаи grep -C
и -m
. {{ 1}} Вы должны отредактировать его, чтобы он соответствовал вашим потребностям.
#!/bin/bash
# emulate grep -m <number> -C <number> <pattern> <file>... with awk.
context=0
todo=999999
while [ $# -gt 0 ]
do case $1 in
-m) shift
todo=$1 ;;
-C) shift
context=$1 ;;
-*) echo "unsupported: $1" >&2
exit 1 ;;
*) break ;;
esac
shift
done
pattern=${1?missing pattern}
shift
awk -v context="$context" -v pat="$pattern" -v todo="$todo" '
BEGIN{ held = -1 }
{ for(i = context;i>0;i--)lb[i] = lb[i-1];
lb[0] = sprintf("%s:%d:%s",FILENAME,NR,$0);
held++;
}
$0 ~ pat && done++<todo {
if(held>context){
if(done!=1)print "--";
held = context;
}
for(i = held;i>0;i--)print lb[i];
held = -1;
max = NR+context;
}
NR<=max { print lb[0]; held = -1 }
' "$@"
Две упомянутые вами опции относятся к GNU grep.
-m 500
- остановить чтение после первых 500 совпадающих строк -C 0
- вывести нулевые строки выходного контекста Поведение с -C 0
уже является поведением по умолчанию, поэтому не требуется ничего особенного для его эмуляции в AIX. Все, о чем вам нужно беспокоиться, это как ограничить вывод до первых 500 совпадений. Один из способов сделать это - перенаправить вывод из fgrep
через head
:
fgrep [options...] [files...] | head -n500
Если вам нужно использовать -C
с другим номером, вы верны, что вам, вероятно, потребуется написать сценарий с помощью чего-то вроде awk
, поскольку в AIX grep
такой возможности нет. аналогичный вопрос , заданный в Stack Overflow, на который есть несколько ответов, которые могут оказаться полезными.