美文网首页
shell中多行文本的输出(使用cat/EOF)

shell中多行文本的输出(使用cat/EOF)

作者: 早点起床晒太阳 | 来源:发表于2020-09-12 10:55 被阅读0次

参考资料
https://my.oschina.net/wuweixiang/blog/2989375

背景

最近做项目写了个导数的脚本,其实就是在一个集群的数据拉取下来到另外一个集群上并且建表(机器不通只能先这么干),然后将表中的数据用spark坐下整理放到整理目录下。
但是在建表的时候发生了些问题。

出现的问题

我的初衷是将建表语句在脚本中用如下表示

sql=
"
create table xxx (
xxx string
)
row foramte delilimited
...
"

这种形式,然后使用echo将变量输出重定向到当前目录的一个sql文件然后使用 hive -f 文件路径来建表
发现报错如下

(\n 'transient_lastDdlTime' = '1598093488'\n)\n': command not found

注意: sql中不能有反引号,不然会被linux 识别成命令。

反引号的定义:反引号在Linux shell命令行中有特殊的含义:反引号间的内容,会被shell先执行。其输出被放入主命令后,主命令再被执行。

解决

echo不适合做多行文本以及长文本的输出 涉及到多行文本(也支持变量替换)的情况 我们使用cat/EOF更合适

具体形式(自己写的demo)

cat >> create_table.sh << EOF 
CREATE TABLE vbapfe4203ca074dad4e05551d39_parquet(column_0 BIGINT, column_1 STRING, column_2 BIGINT, column_3 BIGINT, column_4 STRING, column_5 STRING, column_6 STRING, column_7 BIGINT, column_8 BIGINT, column_9 BIGINT, column_10 BIGINT, column_11 BIGINT)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
)
STORED AS
  INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
TBLPROPERTIES (
  'transient_lastDdlTime' = '1598093488'
)
EOF

这样就可以吧多行的文本输出到当前目录的create_table.sh中了。

这里注意

1、EOF是“end of file”,表示文本结束符。 EOF只是标识,不是固定的 (换成别的字符是一样的)

2、cat >> create_table.sh << EOF 是表示将输出叠加到create_table.sh
cat > create_table.sh << EOF 是表示将输出覆盖到create_table.sh

相关文章

  • shell中多行文本的输出(使用cat/EOF)

    参考资料https://my.oschina.net/wuweixiang/blog/2989375 背景 最近做...

  • cat <<EOF

    (1)cat和EOF简介 cat 用于显示文本文件内容,全部输出EOF “end of file”,表示...

  • 脚本改写总结

    1.cat EOF cat << EOF后的文本为标准输入,不需要考虑shell语法缩进,直接按实际缩进编写 EO...

  • cat和EOF的使用

    cat和EOF的使用 (1)cat和EOF简介 (2)使用 用法1.多行导入文件(新建文件或者覆盖文件内容) 来看...

  • cat << EOF > script.txt

    经过测试,输入多行文本只有cat << EOF可以实现,echo只能输入单行文本。 如果我们需要将多行文本通过SH...

  • cat

    EOF是“end of file”,表示文本结束符。 # cat << EOF > test.sh 或者...

  • Linux 命令(持续更新)

    1. cat << EOF >abcd.txt 多行导入文件(新建文件或者覆盖文件内容) 2. cat << EO...

  • shell中的EOF用法

    1、EOF Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EO...

  • 关于shell的EOF

    shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返...

  • shell指令用法

    #* 和 %* cat写入文件 cat <

网友评论

      本文标题:shell中多行文本的输出(使用cat/EOF)

      本文链接:https://www.haomeiwen.com/subject/weqwektx.html