임팔라 쉘에서 특정 레코드를 읽으려면 파이프를 사용했습니다. 이게 내가 얻은 거야
[cloudera@localhost ~]$ echo "select * from abc where key > 'a-26052014015400' limit 1;" | impala-shell
Starting Impala Shell without Kerberos authentication
Connected to localhost.localdomain:21000
Server version: impalad version cdh5-1.3.0 RELEASE (build 40e1b62cf0b97f666d084d9509bf9639c575068c)
Welcome to the Impala shell. Press TAB twice to see a list of available commands.
Copyright (c) 2012 Cloudera, Inc. All rights reserved.
(Shell build version: Impala Shell vcdh5-1.3.0 (40e1b62) built on Tue Mar 25 13:46:44 PDT 2014)
Query: select * from abc where key > 'a-26052014015400' limit 1
[localhost.localdomain:21000] > +------------------------+------+----------------+-------+
| key | hpid | uts | value |
+------------------------+------+----------------+-------+
| a-26052014015700 | HS2 | 26052014015450 | 50 |
+------------------------+------+----------------+-------+
Returned 1 row(s) in 2.42s
Goodbye
내가 정말로 원하는 것은 a-26052014015700 | HS2 | 26052014015450 | 50
awk 프로그래밍의 이 기록입니다. 파이프 awk 명령을 사용해 보았습니다.
`echo "select * from abc where key > 'a-26052014015400' limit 1;" | impala-shell| awk -F'=' '{print $2}' | awk -F '>' '{print $1}`
그러나 예상한 결과를 얻지 못했습니다. 레코드를 추출하는 더 좋고 효율적인 방법이 있습니까?
답변1
다음으로 파이핑해 보세요 grep
.
$ grep -E "| a-[0-9]* | HS2 | [0-9]* | [0-9]* |"
|
첫 번째 와 마지막을 제거하십시오 |
.
$ grep -Eo " a-[0-9]* \| HS2 \| [0-9]* \| [0-9]* "
"-E"는 확장 정규식 구문에 액세스합니다.
"-o"는 줄의 전체 내용이 아닌 줄의 일치하는 부분만 출력하는 데 사용됩니다.
답변2
출력이 항상 다음 형식이라는 것을 알고 있다면엑스제목 행 및예바닥글 행에서는 필요한 부분만 사용하여 얻을 수 있습니다 head
.tail
에코 쿼리|임팔라 쉘|tail-n+엑스|헤드-엔-예 # -- 위의 예에서 -- echo "key > 'a-26052014015400'이 1인 abc에서 *를 선택하세요." |테일-n +13 |헤드-n -3 # 반품 a-26052014015700 50 |
꼬리
-N,--알았어=칼륨 마지막 10줄 대신 마지막 K줄을 출력합니다. 또는 사용-N+K 라인 K부터 시작하여 라인을 출력합니다.
머리
-N,--알았어=[-]케이 처음 10줄 대신 처음 K줄을 인쇄합니다. "-"로 시작하여 각 파일의 마지막 K줄을 제외한 모든 줄을 인쇄합니다.