问题类似于:使用bashshell脚本从文件中查找并提取特定字符串后的值?
我正在执行一个来自shell脚本的配置单元查询,需要在一个变量中提取一些值,查询如下:
sql="show create table dev.emp"
partition_col= `beeline -u $Beeline_URL -e $sql` | grep 'PARTITIONED BY' | cut -d "'" -f2`
sql查询的输出如下:
+----------------------------------------------------+
| createtab_stmt |
+----------------------------------------------------+
| CREATE EXTERNAL TABLE `dv.par_kst`( |
| `col1` string, |
| `col2` string, |
| `col3` string) |
| PARTITIONED BY ( |
| `part_col1` int, |
| `part_col2` int) |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' |
| LOCATION |
| 'hdfs://nameservicets1/dv/hdfsdata/par_kst' |
| TBLPROPERTIES ( |
| 'spark.sql.create.version'='2.2 or prior', |
| 'spark.sql.sources.schema.numPartCols'='2', |
| 'spark.sql.sources.schema.numParts'='1', |
| 'spark.sql.sources.schema.part.0'='{"type":"struct","fields":[{"name":"col1","type":"string","nullable":true,"metadata":{}},{"name":"col2","type":"string","nullable":true,"metadata":{}},{"name":"col3","type":"integer","nullable":true,"metadata":{}},{"name":"part_col2","type":"integer","nullable":true,"metadata":{}}]}', |
| 'spark.sql.sources.schema.partCol.0'='part_col1', |
| 'spark.sql.sources.schema.partCol.1'='part_col2', |
| 'transient_lastDdlTime'='1587487456') |
+----------------------------------------------------+
从上面的sql中,我想提取按细节划分的分区。
Desired output :
part_col1 , part_col2
尝试使用以下代码,但未获得正确的值:
partition_col=`beeline -u $Beeline_URL -e $sql` | grep 'PARTITIONED BY' | cut -d "'" -f2`
而且这些分区方式不是固定的,这意味着对于其他文件,它可能包含3个或更多,所以我想提取所有分区方式。
所有值之间的分区和行格式serde,删除空格“`”和数据类型!
2条答案
按热度按时间i7uaboj41#
你可以用
awk
:将上述内容存储在名为
beeline.awk
执行时:l2osamch2#
使用sed
演示:
说明:
sed -n '/PARTITIONED BY/,/ROW FORMAT SERD/p'
<---打印两个图案之间的线条sed '1d; $d'
<--删除第一行和最后一行sed -E 's/.*(
.*).*/\1/g'
<--打印字符串```tr -d '
'<--删除'``字符
tr '\n' ','<--将新行替换为
,`