首页 > 解决方案 > 在linux中的csv中添加查询结果

问题描述

我在 shell 脚本中有一个查询,结果如下:

article;20200120
fruit;22
fish;23

我每天都执行该报告。我希望第二天执行查询时会显示如下输出:

article;20200120;20200121
fruit;22;11
fish;23;12

这些报告我在 linux shell 脚本中使用 postgre sql 执行。生成 csv 的输出,使用“>>”重定向输出,请帮助实现这一目标。

谢谢

标签: shell

解决方案


这可能有点脆弱,但听起来你想要的可以用cutand来完成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每个输入文件并在合并它们之前坚持结果相同。


推荐阅读