我已经使用管道从 impala shell 读取特定记录。这是我得到的
[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
如果您知道您的输出将始终采用以下格式X标题行和是页脚行,您可以使用head
和tail
来仅获取您需要的部分,
回显查询|黑斑羚壳 |尾部-n+X|头-n-是 # -- 在你上面的例子中 -- echo“从abc中选择*,其中键>'a-26052014015400'限制1;” |黑斑羚壳 \ |尾-n +13 |头-n -3 # 返回 | a-26052014015700 | HS2 | 26052014015450 | 50 | 50
尾巴
-n,--行=钾 输出最后 K 行,而不是最后 10 行; 或使用-n+K 输出从第 K 行开始的行
头
-n,--行=[-]K 打印前 K 行而不是前 10 行; 以“-”开头,打印每个文件除最后 K 行之外的所有行