Shell ETL 操作

刪除文件第一行記錄妖滔,即字段名稱(chēng)

處理的文件第一行都是字段名稱(chēng)俭尖,我們?cè)谖募械臄?shù)據(jù)導(dǎo)入到數(shù)據(jù)倉(cāng)庫(kù)Hive中時(shí)氢惋,不需要第一行字段名稱(chēng)洞翩,因此,這里在做數(shù)據(jù)預(yù)處理時(shí)焰望,刪除第一行骚亿。
命令說(shuō)明:

sed [-nefr] [動(dòng)作]
選項(xiàng)與參數(shù):
-n :使用安靜(silent)模式。在一般 sed 的用法中熊赖,所有來(lái)自 STDIN 的數(shù)據(jù)一般都會(huì)被列出到終端上来屠。但如果加上 -n 參數(shù)后,則只有經(jīng)過(guò)sed 特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來(lái)震鹉。
-e :直接在命令列模式上進(jìn)行 sed 的動(dòng)作編輯俱笛;
-f :直接將 sed 的動(dòng)作寫(xiě)在一個(gè)文件內(nèi), -f filename 則可以運(yùn)行 filename 內(nèi)的 sed 動(dòng)作足陨;
-r :sed 的動(dòng)作支持的是延伸型正規(guī)表示法的語(yǔ)法嫂粟。(默認(rèn)是基礎(chǔ)正規(guī)表示法語(yǔ)法)
-i :直接修改讀取的文件內(nèi)容,而不是輸出到終端墨缘。

操作:

sed -i '1d' xxxx.csv

查看:

head -5 xxxx.csv 

sed 還可以幫我們做更多星虹,替換操作等。

對(duì)字段進(jìn)行預(yù)處理

對(duì)數(shù)據(jù)集進(jìn)行一些預(yù)處理镊讼,包括為每行記錄增加一個(gè)id字段(讓記錄具有唯一性)宽涌、增加一個(gè)省份字段(用來(lái)后續(xù)進(jìn)行可視化分析),并且丟棄一個(gè)字段(后面分析不需要這個(gè)字段)蝶棋。
下面我們要建一個(gè)腳本文件(xxx.sh):

#!/bin/bash
#下面設(shè)置輸入文件卸亮,把用戶(hù)執(zhí)行xxx.sh命令時(shí)提供的第一個(gè)參數(shù)作為輸入文件名稱(chēng)
infile=$1
#下面設(shè)置輸出文件,把用戶(hù)執(zhí)行xxx.sh命令時(shí)提供的第二個(gè)參數(shù)作為輸出文件名稱(chēng)
outfile=$2
#注意M嫒埂兼贸!最后的$infile > $outfile必須跟在}’這兩個(gè)字符的后面
awk -F "," 'BEGIN{
        srand();
        id=0;
        Province[0]="山東";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陜西";Province[5]="內(nèi)蒙古";Province[6]="上海市";
        Province[7]="北京市";Province[8]="重慶市";Province[9]="天津市";Province[10]="福建";Province[11]="廣東";Province[12]="廣西";Province[13]="云南"; 
        Province[14]="浙江";Province[15]="貴州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
        Province[21]="黑龍江";Province[22]="吉林";Province[23]="遼寧"; Province[24]="江蘇";Province[25]="甘肅";Province[26]="青海";Province[27]="四川";
        Province[28]="安徽"; Province[29]="寧夏";Province[30]="海南";Province[31]="香港";Province[32]="澳門(mén)";Province[33]="臺(tái)灣";
    }
    {
        id=id+1;
        value=int(rand()*34);       
        print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
    }' $infile > $outfile

上面的代碼的基本形式是:

awk -F "," '處理邏輯' $infile > $outfile
使用awk可以逐行讀取輸入文件,并對(duì)逐行進(jìn)行相應(yīng)操作吃溅。
其中溶诞,-F參數(shù)用于指出每行記錄的不同字段之間用什么字符進(jìn)行分割,這里是用逗號(hào)進(jìn)行分割决侈。處理邏輯代碼需要用兩個(gè)英文單引號(hào)引起來(lái)螺垢。
$infile是輸入文件的名稱(chēng),我們這里會(huì)輸入infile.csv赖歌,
$outfile表示處理結(jié)束后輸出的文件名稱(chēng)枉圃,我們后面會(huì)使用outfile.txt作為輸出文件名稱(chēng)。

在上面的xxx.sh代碼的處理邏輯部分庐冯,
srand()用于生成隨機(jī)數(shù)的種子孽亲,
id是我們?yōu)閿?shù)據(jù)集新增的一個(gè)字段,它是一個(gè)自增類(lèi)型展父,每條記錄增加1墨林,這樣可以保證每條記錄具有唯一性赁酝。
我們會(huì)為數(shù)據(jù)集新增一個(gè)省份字段,用來(lái)進(jìn)行后面的數(shù)據(jù)可視化分析旭等,為了給每條記錄增加一個(gè)省份字段的值,這里衡载,我們首先用Province[]數(shù)組用來(lái)保存全國(guó)各個(gè)省份信息搔耕,然后,在遍歷數(shù)據(jù)集infile.csv的時(shí)候痰娱,每當(dāng)遍歷到其中一條記錄弃榨,使用value=int(rand()*34)語(yǔ)句隨機(jī)生成一個(gè)0-33的整數(shù),作為Province省份值梨睁,然后從Province[]數(shù)組當(dāng)中獲取省份名稱(chēng)鲸睛,增加到該條記錄中。

substr($6,1,10)這個(gè)語(yǔ)句是為了截取時(shí)間字段time的年月日坡贺,方便后續(xù)存儲(chǔ)為date格式官辈。awk每次遍歷到一條記錄時(shí),每條記錄包含了6個(gè)字段遍坟,其中拳亿,第6個(gè)字段是時(shí)間字段,substr($6,1,10)語(yǔ)句就表示獲取第6個(gè)字段的值愿伴,截取前10個(gè)字符肺魁,第6個(gè)字段是類(lèi)似”2014-12-08 18″這樣的字符串(也就是表示2014年12月8日18時(shí)),substr($6,1,10)截取后隔节,就丟棄了小時(shí)鹅经,只保留了年月日。
另外怎诫,在print id”\t”$1″\t”$2″\t”$3″\t”$5″\t”substr($6,1,10)”\t”P(pán)rovince[value]這行語(yǔ)句中瘾晃,我們丟棄了每行記錄的第4個(gè)字段,所以刽虹,沒(méi)有出現(xiàn)$4酗捌。我們生成后的文件是“\t”進(jìn)行分割,這樣涌哲,后續(xù)我們?nèi)ゲ榭磾?shù)據(jù)的時(shí)候胖缤,效果讓人看上去更舒服,每個(gè)字段在排版的時(shí)候會(huì)對(duì)齊顯示阀圾,如果用逗號(hào)分隔哪廓,顯示效果就比較亂。

最后初烘,保存outfile.sh代碼文件涡真,退出vim編輯器分俯。

運(yùn)行shell文件:

chmod +x ./xxx.sh
./xxx.sh ./infile.csv ./outfile.txt

原文:https://blog.csdn.net/yangang1223/article/details/80625405

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哆料,隨后出現(xiàn)的幾起案子缸剪,更是在濱河造成了極大的恐慌,老刑警劉巖东亦,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杏节,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡典阵,警方通過(guò)查閱死者的電腦和手機(jī)奋渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)壮啊,“玉大人嫉鲸,你說(shuō)我怎么就攤上這事〈跆洌” “怎么了玄渗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)染突。 經(jīng)常有香客問(wèn)我捻爷,道長(zhǎng),這世上最難降的妖魔是什么份企? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任也榄,我火速辦了婚禮,結(jié)果婚禮上司志,老公的妹妹穿的比我還像新娘甜紫。我一直安慰自己,他們只是感情好骂远,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布囚霸。 她就那樣靜靜地躺著,像睡著了一般激才。 火紅的嫁衣襯著肌膚如雪拓型。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天瘸恼,我揣著相機(jī)與錄音劣挫,去河邊找鬼。 笑死东帅,一個(gè)胖子當(dāng)著我的面吹牛压固,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播靠闭,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帐我,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坎炼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拦键,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谣光,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后矿咕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抢肛,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年碳柱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬芜。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莲镣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涎拉,到底是詐尸還是另有隱情瑞侮,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布鼓拧,位于F島的核電站半火,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏季俩。R本人自食惡果不足惜钮糖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酌住。 院中可真熱鬧店归,春花似錦、人聲如沸酪我。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)都哭。三九已至秩伞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欺矫,已是汗流浹背纱新。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汇陆,地道東北人怒炸。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像毡代,于是被迫代替她去往敵國(guó)和親阅羹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勺疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容