場景:接到需求,需要將一個五千萬的表數(shù)據(jù)導(dǎo)出上傳;
要求:文件大小小于2G,每個文件需增加行號掉分,文件中的每個字段長度與接口規(guī)范保持一致;
操作:
第一步:將表中數(shù)據(jù)導(dǎo)出生成文件di_tmp.20200229克伊;根據(jù)每行文件的總長度酥郭,每個文件大小小于2G,計算每個文件的記錄數(shù)為80萬
第二步:分割文件愿吹,80萬記錄為一個文件不从,通過split命令對文件按行數(shù)進(jìn)行分割
split -l 800000 di_tmp.20200229 new_di_tmp.20200229
分割后有多個文件,新文件的命名方式為:new_di_tmp.20200229a(a~z)
第三步:對分割后的文件進(jìn)行定長轉(zhuǎn)換犁跪,通過awk對文件進(jìn)行定長轉(zhuǎn)換
cat?new_di_tmp.20200229aa |awk -F"\t" '{printf ("%-8s%-1s%-15s%-15s%-17s%-4s\n",FNR,$1,$2,$3,$4,$5)}'
這里需要注意:awk命令后跟的分割符"\t"消返,需要和數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)的分割符一致,這里都是用的tab符耘拇;通過FNR增加行號
操作結(jié)束撵颊,文件壓縮傳輸。