我有一個包含以下內容的檔案。我需要將內容分成 2 個檔案 o/p1 應該包含第一個大括號 () 和 ` 中的所有內容,并且只列印 1&2 列。o/p2 應該有位置和它的值
$ cat dt.txt
CREATE EXTERNAL TABLE `rte.fteff_ft`(
`dt` date,
`wk_id` int,
`yq_id` int(10,00),
`te_ind` string,
`yw_dt` date,
`em_dt` date comment dfdsf sdfsdf)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0007'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://dfdf/data/ffff/ODE/TdddfT/'
TBLPROPERTIES (
'last_modified_by'='asdas',
'last_modified_time'='1639551681',
'numFiles'='1',
'totalSize'='2848434',
'transient_lastDdlTime'='1639551681')
我需要兩個檔案中的上述輸出。
o/p1: a.txt
dt date,
wk_id int,
yq_id int(10,00),
te_ind string,
yw_dt date,
em_dt date
o/p2: b.txt
LOCATION
'hdfs://dfdf/data/ffff/ODE/TdddfT/'
uj5u.com熱心網友回復:
首先,用于sed運行幾個命令,以在 'CREATE EXTERNAL' 和 'ROW DELIMITED FORMAT' 之間的行范圍內操作它們出現在行首的位置,不包括那些行。然后用任何東西替換重音符號,然后只保留前兩個單詞。
sed -E '/CREATE EXTERNAL/,/ROW FORMAT DELIMITED/!d;//d;s/`//g; s/(([^ ] ){2}).*/\1/' dt.txt > a.txt
其次,使用 -A 選項來grep匹配一行上的單詞 'LOCATION' 本身加上下面的 1 行。
grep -A 1 '^LOCATION$' dt.txt > b.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522219.html
標籤:壳Unix
