Niektóre rozwiązania z AWK:
grep -r "string here" * | awk 'END { print NR } 1'
Następny nich jest całkowita liczba, liczba plików i liczba meczów dla każdego, wyświetlając pierwszy mecz z każdym z nich (aby wyświetlić wszystkie wyniki, należy zmienić warunek ++f[$1]
):
grep -r "string here" * |
awk -F: 'END { print "\nmatches: ", NR, "files: ", length(f);
for (i in f) print i, f[i] } !f[$1]++'
wyjścia dla pierwszego rozwiązania (wyszukiwanie w katalogu dla "boost::
".I ręcznie wyciąć niektóre zbyt długie linie więc dopasować poziomo):
list_inserter.hpp: return range(boost::begin(r), boost::end(r));
list_of.hpp: ::boost::is_array<T>,
list_of.hpp: ::boost::decay<const T>,
list_of.hpp: ::boost::decay<T> >::type type;
list_of.hpp: return ::boost::iterator_range_detail::equal(l, r);
list_of.hpp: return ::boost::iterator_range_detail::less_than(l, r);
list_of.hpp: return ::boost::iterator_range_detail::less_than(l, r);
list_of.hpp: return Os << ::boost::make_iterator_range(r.begin(), r.end());
list_of.hpp: return range(boost::begin(r), boost::end(r));
list_of.hpp: return range(boost::begin(r), boost::end(r));
list_of.hpp: return range(boost::begin(r), boost::end(r));
ptr_list_of.hpp: BOOST_DEDUCED_TYPENAME boost::ptr_...
ptr_list_of.hpp: typedef boost::ptr_vector<T> impl_type;
13
wyjście do drugiego
list_inserter.hpp: return range(boost::begin(r), boost::end(r));
list_of.hpp: ::boost::is_array<T>,
ptr_list_of.hpp: BOOST_DEDUCED_TYPENAME boost::ptr_...
matches: 13 files: 3
ptr_list_of.hpp 2
list_of.hpp 10
list_inserter.hpp 1
Kolory w rezultacie są ładne (--color=always
do grep), ale łamią kiedy wyprowadzony przez awk tutaj. Więc lepiej nie włączaj ich wtedy, chyba że chcesz mieć cały terminal w kolorze później :) Pozdrawiam!
Czy możesz podać więcej szczegółów, na przykład, co dokładnie nie działa? jaka jest pełna ścieżka do grep i do jakiej systme to uruchamiasz? – ennuikiller
Czy możesz wyjaśnić, jakie dane wyjściowe widzisz i jak to, czego chcesz, różni się od tego, co otrzymujesz? – Suppressingfire