![인용된 입력 번호 처리](https://linux55.com/image/41077/%EC%9D%B8%EC%9A%A9%EB%90%9C%20%EC%9E%85%EB%A0%A5%20%EB%B2%88%ED%98%B8%20%EC%B2%98%EB%A6%AC.png)
내 쿼리는 큰따옴표 사이의 값을 추출하는 것입니다 ""
. 입력 예는 다음과 같습니다.
10.219.41.68 - - - [11/6월/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"
대용량 로그 파일이 있어서 줄마다 값이 다를 수 있고 처음 나타나는 큰따옴표 사이의 값을 추출해야 합니다...
예상 출력:
GET /balancer-manager HTTP/1.1
누구든지 아이디어가 있으면 제안해주세요.
답변1
그냥 사용할 수 있습니다cut
이를 위해:
$cut -d '"' -f2 < logfile
GET /balancer-manager HTTP/1.1
-d '"'
cut
필드 구분 기호로 큰따옴표를 사용하도록 지시합니다 . -f2
첫 번째와 두 번째 따옴표 사이에 있는 두 번째 필드 또는 원하는 첫 번째 따옴표 붙은 문자열을 가져오도록 지시합니다.
답변2
사용 방법awk
awk -F'"' '$0=$2' file
말도 안되는 이유로 HTTP 메소드가 실제로 있고 0
다음을 출력하려는 경우
awk -F'"' '{$0=$2}1' file
답변3
여러 가지 방법으로 이 작업을 수행할 수 있습니다.
그리고 awk
:
$ awk -F'"' '{print $2}' file
GET /balancer-manager HTTP/1.1
그리고 perl
:
$ perl -F'"' -anle 'print $F[1]' file
GET /balancer-manager HTTP/1.1
답변4
인용된 입력 번호 처리
echo 1234 | awk '{ i=strtonum($1) ; printf( "%s %d\n",$1, i)}' # no problem
echo '"1234"' | awk '{ i=strtonum($1) ; printf( "%s %d\n",$1, i)}' # does not work
echo '"1234"' | awk '{ gsub("\"",""); i = $1 ; printf( "%s %d\n",$1, i)}' # works