Unix 将配置单元控制台输出转换为文本或csv

Unix 将配置单元控制台输出转换为文本或csv,unix,hive,console,Unix,Hive,Console,我需要对配置单元表执行计数,并将结果输出到文本文件中,然后将其作为触发器放到另一个位置 配置单元输出当前如下所示: +-------------+----------+ | _c0 | _c1 | +-------------+----------+ | 2020-03-01 | 3203500 | +-------------+----------+ 我尝试了以下选项: hive -e 'select CURRENT_DATE, count(*) from db

我需要对配置单元表执行计数,并将结果输出到文本文件中,然后将其作为触发器放到另一个位置

配置单元输出当前如下所示:

+-------------+----------+
|     _c0     |   _c1    |
+-------------+----------+
| 2020-03-01  | 3203500  |
+-------------+----------+
我尝试了以下选项:

hive -e 'select CURRENT_DATE, count(*) from db.table;' | sed 's/[[:space:]]\+/,/g' > /trigger/trigger_file.txt
但它并没有给出预期的结果。我还能试什么

.txt文件中的预期结果如下所示:

2020-03-01,3203500

为了避免使用sed..etc替换所有结果,请尝试使用此方法,并且结果输出将具有分离的数据

hive -e 'select CONCAT_WS(',',CURRENT_DATE, count(*)) from Mytable' > /home/user/Mycsv.csv

为了避免使用sed..etc替换所有结果,请尝试使用此方法,并且结果输出将具有分离的数据

hive -e 'select CONCAT_WS(',',CURRENT_DATE, count(*)) from Mytable' > /home/user/Mycsv.csv

配置单元提供了写入文件的内置命令

INSERT OVERWRITE LOCAL DIRECTORY '/home/docs/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from db.table;
另一种方式

hive -S -e 'set hive.cli.print.header=false; select * from db.table' | sed 's/[[:space:]]\+/,/g' > /home/docs/temp.csv

配置单元提供了写入文件的内置命令

INSERT OVERWRITE LOCAL DIRECTORY '/home/docs/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from db.table;
另一种方式

hive -S -e 'set hive.cli.print.header=false; select * from db.table' | sed 's/[[:space:]]\+/,/g' > /home/docs/temp.csv

您可以将sed命令替换为

awk -F'[| ]+' '$2 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{print $2","$3}'

-F'[|]+'将字段分隔符设置为与一个或多个空格或管道字符匹配的[|]+regex,然后在第二个字段与类日期模式[0-9]{4}-[0-9]{2}-[0-9]{2}匹配的位置获取所有记录,请参见,并使用逗号和空格打印第二列和第三列值。

您可以将sed命令替换为

awk -F'[| ]+' '$2 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{print $2","$3}'

-F'[|]+'将字段分隔符设置为与一个或多个空格或管道字符匹配的[|]+regex,然后在第二个字段与类日期模式[0-9]{4}-[0-9]{2}-[0-9]{2}匹配的位置获取所有记录,请参见,并用逗号和空格打印第二列和第三列的值。

尝试用awk-F'[|]+'$2~/[0-9]{4}-[0-9]{2}-[0-9]{2}/{print$2,$3}替换sed命令这就像一个符咒一样完美地工作了。我想我必须加强我与正则表达式的游戏。非常感谢Wiktor。很高兴它对你有用。请考虑接受尝试用AWK-F′[`+]′$ 2~/[09] { 4 } [0-9] { 2 } [[09] { 2 }/{打印2美元,$3 }来替换SED命令。我想我必须加强我与正则表达式的游戏。非常感谢Wiktor。很高兴它对你有用。请考虑接受