从 awk 中的命令输出中获取特定行

从 awk 中的命令输出中获取特定行

我已经使用管道从 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 | 50awk编程中的这张记录。我尝试过使用管道 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标题行和页脚行,您可以使用headtail来仅获取您需要的部分,

    回显查询|黑斑羚壳 |尾部-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 行之外的所有行

相关内容