shell中多行文字的輸出 使用cat EOF

2021-10-09 09:27:26 字數 1652 閱讀 7447

參考資料

最近做專案寫了個導數的指令碼,其實就是在乙個集群的資料拉取下來到另外乙個集群上並且建表(機器不通只能先這麼幹),然後將表中的資料用spark坐下整理放到整理目錄下。

但是在建表的時候發生了些問題。

我的初衷是將建表語句在指令碼中用如下表示

sql=

"create table *** (

*** 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

使用DrawTextEx繪製多行文字

使用gidplus進行文字繪製時,大家經常需要把多行文字繪製在乙個矩形框中,通常採用的繪製介面是drawtext和drawtextex。這個兩個函式確實可以實現矩形框中的多行繪製,但是,它們都沒有辦法在一次繪製中定製文字行距。為了實現文字多行繪製的同時,可以定製行距,可以採用drawtextex方法...

多行文字 單行文字的垂直居中

在說到這個問題的時候,也許有人會問css中不是有vertical align屬性來設定垂直居中的嗎?即使是某些瀏覽器不支援我只需做少許的css hack技術就可以啊!所以在這裡我還要囉嗦兩句,css中的確是有vertical align屬性,但是它只對 x html元素中擁有valign特性的元素才...

多行文字的垂直居中

與其他一些display屬性類似,table cell同樣會被其他一些css屬性破壞,例如float,position absolute,所以,在使用display table cell與float left或是position absolute屬性盡量不用同用。設定了display table c...