Moje zapytanie polega na wyodrębnieniu wartości między podwójnymi cudzysłowami ""
. Przykładowe dane wejściowe to:
10.219.41.68 - - - [11 / Jun / 2014: 10: 23: 04 -0400] Sec: 0 MicSec: 1797 "GET / balancer-manager HTTP / 1.1" 200 28980 "-" "curl / 7.15.5 (i386 -redhat-linux-gnu) libcurl / 7.15.5 OpenSSL / 0.9.8b zlib / 1.2.3 libidn / 0.6.5 "
Mam duże pliki dziennika, więc wartości mogą się różnić dla każdej linii, trzeba wyodrębnić wartość między pierwszym wystąpieniem podwójnych cudzysłowów…
Oczekiwany wynik:
GET /balancer-manager HTTP/1.1
Jeśli ktoś ma jakiś pomysł, proszę o sugestię.
Odpowiedzi:
Możesz po prostu użyć
cut
do tego:-d '"'
mówi,cut
aby użyć podwójnego cudzysłowu jako ogranicznika pola.-f2
każe mu wziąć drugie pole, które znajduje się między pierwszym a drugim cudzysłowem - lub pierwszym ciągiem cytowanym - dokładnie tym, czego chcesz.źródło
%!cut -d '"' -f2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58
?Sposób użycia
awk
Jeśli z jakiegoś absurdalnego powodu twoje metody HTTP są w rzeczywistości
0
i chcesz je wyprowadzićźródło
$2
jest zerowy?0
nie tylko zerowa?Ponieważ rozwiązania
awk
iperl
są już dostępne, chciałem spróbowaćsed
:źródło
Możesz to zrobić na wiele sposobów.
Z
awk
:Z
perl
:źródło
przetwarzanie podanych liczb wejściowych
źródło