亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3246 | 回復(fù): 19
打印 上一主題 下一主題

學(xué)習(xí)隨筆:awk點點滴滴01-metaxing [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-12-30 20:05 |只看該作者 |倒序瀏覽
問題發(fā)生環(huán)境:
     我們的操作維護(hù)系統(tǒng)升級后,原始數(shù)據(jù)發(fā)生變化,但是對應(yīng)的工具已經(jīng)沒有開發(fā)團(tuán)隊繼續(xù)開發(fā)和支持了,而老的工具無法正常導(dǎo)入新的系統(tǒng)配置數(shù)據(jù)!
   根據(jù)錯誤提示確定問題發(fā)生的對應(yīng)的源文件,對此文件200多個字段分析后發(fā)現(xiàn),是由于此文件中有5個字段的值的類型由升級前的整數(shù)變?yōu)樯壓蟮母↑c型,導(dǎo)入工具導(dǎo)入這五個字段的時候提示出錯,而不能正常導(dǎo)入,而這個文件恰恰是其中最關(guān)鍵的文件,不能缺少,對這幾個字段分析發(fā)現(xiàn),其中的值全為0.00,而且目前網(wǎng)絡(luò)對此具體值并不敏感,可以直接替換為整數(shù)0,本人就在網(wǎng)上搜索相關(guān)主題,最后發(fā)現(xiàn)可以直接使用awk對這幾個字段進(jìn)行替換.

解決方法如下:

在原始處理數(shù)據(jù)的shell中增加如下兩句
mv BTS.txt BTSorg.txt
$Rep_Tools/gawk -F';' '{OFS=";"}{$165="0";$166="0";$167="0";$168="0";$205="0";print}' BTSorg.txt > BTS.txt

說明:
1.我們的源文件名為BTS.TXT,首先將源文件通過mv命令改名BTSorg.txt.作為處理時的輸入文件,也作為原數(shù)據(jù)予以保留
2.通過第二行的指令對更名后源文件BTSorg.txt中第165,166,167,168,205字段直接替換為0,并使用print輸出更新后的整行內(nèi)容到BTS.txt
處理前后的文件見附件!
處理前的文本文件內(nèi)容: BTSorg.zip (32.47 KB, 下載次數(shù): 28)
處理后的文本文件內(nèi)容: BTS.zip (32.33 KB, 下載次數(shù): 21)

此問題解決了數(shù)據(jù)不能正常導(dǎo)入的問題,但并非最完美的解決方案,還存在以下問題:
1.因為這個源文件首行是標(biāo)題行,此命令將標(biāo)題行對應(yīng)列的標(biāo)題也改為了0
2.假如這些列的數(shù)據(jù)非0,如是8.00,此命令改變了原始值

為了真正掌握相關(guān)awk知識,尋求盡可能完美的解決方法,在此將此問題提出,歡迎壇友能給出更好的建議
1.解決在替換時不替換標(biāo)題行,也就是第一行對應(yīng)列的內(nèi)容
2.將這些列不直接賦0,而是將原值轉(zhuǎn)換為整型數(shù)付給對應(yīng)列,盡可能把對原始數(shù)據(jù)的影響降到最低!

[ 本帖最后由 metaxing 于 2008-12-30 20:20 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2008-12-30 22:36 |只看該作者
為了真正掌握相關(guān)awk知識,尋求盡可能完美的解決方法,在此將此問題提出,歡迎壇友能給出更好的建議
1.解決在替換時不替換標(biāo)題行,也就是第一行對應(yīng)列的內(nèi)容
2.將這些列不直接賦0,而是將原值轉(zhuǎn)換為整型數(shù)付給對應(yīng)列,盡可能把對原始數(shù)據(jù)的影響降到最低!

修改如下
awk -F";" 'NR==1;NR>1 {for (i=1;i<=NF;i++) {printf("%d",$i);printf(";")};printf("\n")}' btsorg.txt > bts.txt

論壇徽章:
0
3 [報告]
發(fā)表于 2008-12-30 22:56 |只看該作者
$Rep_Tools/gawk  'BEGIN {FS=OFS=";"} NR==1;NR>1{$165=printf("%d",$165);$166=printf("%d",$166);$167=printf("%d",$167);$168=printf("%d",$16;$205=printf("%d",$205);print}' BTSorg.txt > BTS.txt

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [報告]
發(fā)表于 2008-12-30 23:01 |只看該作者
原帖由 ywlscpl 于 2008-12-30 22:56 發(fā)表
$Rep_Tools/gawk  'BEGIN {FS=OFS=";"} NR==1;NR>1{$165=printf("%d",$165);$166=printf("%d",$166);$167=printf("%d",$167);$168=printf("%d",$16;$205=printf("%d",$205);print}' BTSorg.txt > BTS.txt

printf不能這么用吧。是sprintf?

論壇徽章:
0
5 [報告]
發(fā)表于 2008-12-30 23:13 |只看該作者
原帖由 ynchnluiti 于 2008-12-30 23:01 發(fā)表

printf不能這么用吧。是sprintf?


可以啊,printf格式化輸出

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [報告]
發(fā)表于 2008-12-30 23:19 |只看該作者
原帖由 ywlscpl 于 2008-12-30 23:13 發(fā)表


可以啊,printf格式化輸出

但你用的是
  1. $167=printf("%d",$167);
復(fù)制代碼

你的環(huán)境可以?
我這里不能運行。

論壇徽章:
0
7 [報告]
發(fā)表于 2008-12-30 23:43 |只看該作者
里面都有一個NR==1;
應(yīng)該可以簡化掉吧?

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
8 [報告]
發(fā)表于 2008-12-31 01:11 |只看該作者

回復(fù) #6 ynchnluiti 的帖子

sprintf()返回字串,printf不行。

論壇徽章:
0
9 [報告]
發(fā)表于 2008-12-31 07:59 |只看該作者
原帖由 ynchnluiti 于 2008-12-31 01:11 發(fā)表
sprintf()返回字串,printf不行。


#awk -v v1=10.1 -v v2=9.1 'BEGIN{printf("%d %d\n",v1,v2)}'
10 9

#awk -v v1=10.1 -v v2=9.1 'BEGIN{printf "%d %d\n",v1,v2}'
10 9

我一般用第一種,printf格式化輸出,返回的不一定是字串,跟shell及C里的printf應(yīng)該差不多

[ 本帖最后由 ywlscpl 于 2008-12-31 08:02 編輯 ]

論壇徽章:
0
10 [報告]
發(fā)表于 2008-12-31 08:44 |只看該作者
# echo "1 2" | awk '{printf (%d)}'
awk: not enough args in printf(%d)
input record number 1, file -

# echo "1 2" | awk '{printf "%d"}'
awk: not enough args in printf(%d)
input record number 1, file -

兩者錯誤提示一樣,printf "%d" ,被解釋成printf(%d)

另:# echo "1 2" | awk '{printf $1","$2"\n",sljdfisd$2,$3}'
1,2

printf當(dāng)print用, "\n"后面這些全部被無視
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP