Próbuję policzyć liczbę wierszy po problematycznym wierszu w pliku csv. Wiem, że mogę użyć grep -a #
składni do wypisania # liczby wierszy po znalezieniu dopasowania. Interesuje mnie tylko faktyczna liczba linii. Zdaję sobie sprawę, że mogę ustawić liczbę na MAX_INT, przesłać ją do pliku i wykonać trochę więcej przetwarzania.
Szukam zwięzłego jedno-linijki, która powie mi tylko liczbę.
Jakieś sugestie?
grep -m1 match >/dev/null
. Twoim drugim problemem jest GNUsed
- nie resetuje on swojego przesunięcia wejściowego na specyfikację. Musisz używać-u
w / GNU - co nie zawsze jest pożądane. Mógłbym być jaśniejszy, ale moje założenie było takie, że GNUgrep
i GNUsed
przyjdą w parach. Wydaje mi się, że można równieżgrep -qm1
skrócić/dev/null
przekierowanie - ale GNUgrep
robi dziwne rzeczy w /-q
i nie mogę sobie przypomnieć, jak te dwie rzeczy działają razem.wc -l
jest trochę tańszy niżgrep -c ''
.Oto jeden sposób.
źródło
Innym sposobem - użycie
dc
jest trochę ezoteryczne, ale wydaje się, że działa tutaj ładnie:sed
wyszukujeprob.txt
„problem” i ostatni wiersz i używa=
polecenia, aby wyświetlić numer wiersza obu.dc
odczytuje te dwie wartości na stosie, odwraca je, odejmuje i drukuje różnicę.źródło
Całkowicie za pomocą sed (choć dwa polecenia z potokiem)
Usuwa całą linię przed linią, a następnie następne polecenie zlicza linie w nowym pliku.
źródło
Powinno to usunąć wszystkie wiersze, aż do problematycznego, a następnie policzyć pozostałe wiersze:
źródło