sql - AWK - 解析 SQL 输出
问题描述
我从自定义工具的输出中得到了如下所示的 SQL 输出。将不胜感激任何帮助找出我做错了什么。
column1 | column2 | column3 | column4 | column5 | column6 | column7 | column8 | column9 | column10 | column11
--------------------------------------+----------+-------------+-------------+--------------------+-----------------------+--------------------+---------------+----------------
cec75 | 1234 | 007 | | 2810 | | SOME_TEXT | | | 2020-12-07 20:28:46.865+00 | 2020-12-08 06:40:10.231635+00
(1 row)
我正在尝试将此输出传输到我需要的列column1、column2和column7。我尝试过这样的管道,但它只打印column1
tool check | awk '{print $1, $2}'
column1 |
--------------------------------------+----------+-------------+-------------+--------------------+-----------------------+--------------------+---------------+----------------+----------------------------+-------------------------------
cec75 |
(1 row)
有这样的东西会很好。
ce7c5,1234,SOME_TEXT
我的文件内容
column1 | column2 | column3 | column4 | column5 | column6 | column7 | column8 | column9 | column10 | column11
--------------------------------------+----------+-------------+-------------+--------------------+-----------------------+--------------------+---------------+----------------+----------------------------+-------------------------------
6601c | 2396 | 123 | | 9350 | | SOME_TEXT | | | 2020-12-07 22:49:01.023+00 | 2020-12-08 07:22:37.419669+00
(1 row)
column1 | column2 | column3 | column4 | column5 | column6 | column7 | column8 | column9 | column10 | column11
--------------------------------------+----------+-------------+-------------+--------------------+-----------------------+--------------------+---------------+----------------+----------------------------+-------------------------------
cec75 | 1567 | 007 | | 2810 | | SOME_TEXT | | | 2020-12-07 20:28:46.865+00 | 2020-12-08 07:28:10.319888+00
(1 row)
解决方案
您需要设置正确FS
并以某种方式过滤掉不需要的(垃圾)行。我会按照以下方式进行。让file.txt
内容为:
column1 | column2 | column3 | column4 | column5 | column6 | column7 | column8 | column9 | column10 | column11
--------------------------------------+----------+-------------+-------------+--------------------+-----------------------+--------------------+---------------+----------------
cec75 | 1234 | 007 | | 2810 | | SOME_TEXT | | | 2020-12-07 20:28:46.865+00 | 2020-12-08 06:40:10.231635+00
(1 row)
然后
awk 'BEGIN{FS="[[:space:]]+\\|[[:space:]]+";OFS=","}(NR>=2 && NF>=2){print $1,$2,$7}' file.txt
输出:
cec75,1234,2020-12-07 20:28:46.865+00
说明:我将字段分隔符 ( FS
) 设置为一个或多个:space:
字面值的|
一个或多个:space:
,其中:space:
表示任何空格。根据您的数据,您可能会选择使用零个或多个而不是一个或多个 - 这样做替换+
为*
. 对于不是第一行(此过滤出标题)且至少有 2 个字段(此过滤出带有-
and+
和的行(1 row)
)的每一行,我打印第一列,
的内容,然后是第二列的,
内容,然后是第七列的内容柱子。
推荐阅读
- html - 如何最好地在文本字段的轨道上水平对齐红宝石?
- embedded-linux - 在设备树标准(dts 文件)中短接 SoC 的两个引脚
- authentication - 在端到端测试期间绕过护照身份验证
- python - 在 Windows 10 上执行没有 Python 3.7 启动器和扩展的脚本
- angular - Express 和 NGINX 与同一服务器上的子域
- vue.js - 在 vuejs 中使用 axios 进行全局错误处理
- android-studio - 开发 AR 应用程序以可视化数据
- laravel - Laravel 关系数据库 - 链接 4 个表
- excel - 我们如何在声明语句中使用字符串变量?
- mongodb - 将 mongodb docker 容器连接到 localhost