shell - 在linux中的csv中添加查询结果
问题描述
我在 shell 脚本中有一个查询,结果如下:
article;20200120
fruit;22
fish;23
我每天都执行该报告。我希望第二天执行查询时会显示如下输出:
article;20200120;20200121
fruit;22;11
fish;23;12
这些报告我在 linux shell 脚本中使用 postgre sql 执行。生成 csv 的输出,使用“>>”重定向输出,请帮助实现这一目标。
谢谢
解决方案
这可能有点脆弱,但听起来你想要的可以用cut
and来完成paste
。
让我们从我们想要加入的两个文件开始:
$ cat f1.csv
article;20200120
fruit;22
fish;23
$ cat f2.csv
article;20200121
fruit;11
fish;12
我们首先使用cut
从第二个文件中剥离标题,然后将其paste
与第一个文件一起发送以组合相应的行:
$ cut -d ';' -f 2- f2.csv | paste -d ';' f1.csv -
article;20200120;20200121
fruit;22;11
fish;23;12
解析该命令行,-d ';'
告诉cut
使用分号作为分隔符(默认为制表符),并-f 2-
说打印第二个和以后的字段。 f2.csv
是 的输入文件cut
。然后-d ';'
类似地告诉paste
使用分号连接行,并且f1.csv -
是两个文件以该顺序粘贴在一起,并表示使用shell 运算符-
通过管道输入的输入。|
现在,就像我说的,这有点脆弱。我们不匹配基于标题信息的行,只匹配文件开头的行号。如果某些字段是可选的,或者字段集随时间变化,这将默默地产生垃圾。减轻这种情况的一种方法是首先调用cut -d ';' -f 1
每个输入文件并在合并它们之前坚持结果相同。
推荐阅读
- javascript - IE中的React App heroku部署失败
- git - 如何在 Visual Studio Code 并排文件中看到“git diff”?
- php - 在 laravel 的特定页面中显示表单
- routing - 如何在 .net 核心中间件中获取 RouteData?
- r - 在R中的数据框中查找子字符串
- sql - 在 PowerBI DAX 中使用 RANKX
- java - 是否有另一个像 TableView 一样的 FXML 元素?
- python - 从 2D numpy 数组中删除 NaN
- git - 通过 Visual Studio Code 提交的扩展消息?
- python - 设置时期数与在 for 循环中重复调用它有什么区别?