grep -E '^([^#].*)?app' ./infiles* /dev/null
Думаю, в комментариях оно уже почти было, но если вы сделаете заголовок строки [^ #]
совпадение без комментариев ?
необязательно, тогда вы либо получите строки, которые начинаются с соответствия app , либо вы получите строки, которые начинаются с чего-то еще, а затем в конечном итоге соответствуют app - но в любом случае , вы не получите строк, начинающихся с #
.
Что касается цветов - ну ... это зависит от grep
и регулярного выражения, но стандартный GNU grep должен выделять все совпадение до последнего совпадения app . Если вам нужен более конкретный вариант, вы можете выполнить info grep
, чтобы посмотреть, какие переменные среды GNU grep
будет учитывать при их выделении и настройке надлежащим образом или при отсутствии удовлетворительного результата в этом ключе выделите это сами.
Вы можете попробовать этот простойmawk
(подход без внутренней сортировки )(, который можно улучшить после некоторой доработки):
awk '{print $6 * $7, $0 | ("sort -n > TMP" )} END {close ("TMP"); FS = " "; while (1 == getline < "TMP") print $2}' FS="" file
3245321343456
3453212332345
1234532153457
1234532444568
1324532449876
2345453326780
1324354532376
0987656787689
Использованиеawk
:
$ awk '{ print substr($0,6,1)*substr($0,7,1) }' <file
30
15
2
6
6
2
20
6
Сортировка исходных чисел на основе приведенного выше результата (это был дополнительный вопрос в комментарии):
$ awk '{ print substr($0,6,1)*substr($0,7,1) }' <file | paste - file | sort -n | cut -f 2
3245321343456
3453212332345
1234532153457
1234532444568
1324532449876
2345453326780
1324354532376
0987656787689
Результат умножения вставляется вместе с исходными числами в виде двух отдельных столбцов табуляции -, разделенных разделителями, затем выполняется численная сортировка и извлекается из второго столбца (исходные числа ).
Перл спешит на помощь!
perl -F// -lane 'print $F[5] * $F[6]' < file
-n
считывает ввод построчно -a
разбивает каждую строку на массив @F -F
рассказывает, как разделить //
означает разбить везде, т.е. на отдельные символы -l
удаляет новые строки из ввода и добавляет их в вывод Использование GNU awk для гибкой сортировки:
function compare_product(i1, v1, i2, v2) {
return substr(v1, 6, 1) * substr(v1, 7, 1) - \
substr(v2, 6, 1) * substr(v2, 7, 1);
}
BEGIN {
PROCINFO["sorted_in"]="compare_product";
}
{
elements[NR]=$0
}
END {
asort(elements, sorted_elements, "compare_product");
for (element in sorted_elements) {
print sorted_elements[element];
}
}
Это требует хранения всего содержимого в памяти, а также --из-за простой реализации --пересчитывает произведения больше, чем нужно.