亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
AWK NF和循環(huán)結(jié)構(gòu)的使用
[打印本頁]
作者:
yourkeychen
時(shí)間:
2007-12-14 16:29
標(biāo)題:
AWK NF和循環(huán)結(jié)構(gòu)的使用
BEGIN {
FS=","
chg_str="IP,"
if (length(des_ip) > 0){
ipaddr=des_ip
} else {
ipaddr="10.10.5.44"
}
}
{
#print "NF => " NF
#print "NF => " $NF
if ( NR == 1) {
printf "%s",chg_str
print $0
} else {
printf "\"%s\",",ipaddr
#print "NF => " NF
for (i = 1; i <= NF; i++){
printf "%s",$i
}
#print $0
print "NR => " NR
}
}
程序的目的是,數(shù)據(jù)文件中第一行首增加一個(gè)變量 IP
從第二行起,每行行首增加具體的IP地址值
運(yùn)行結(jié)果,if ( NR == 1) 正常執(zhí)行了
else 部分沒有執(zhí)行.
如果我不用循環(huán)輸出每個(gè)域,而用$0輸出的話,一切正常,
用$i 輸出就沒有任何輸出結(jié)果,什么原因?
前面注釋掉的NF變量在第一行的時(shí)候,也確認(rèn)字段數(shù)大于1
并且,數(shù)據(jù)文件是用 , 分割的帶 " 的數(shù)據(jù). 格式也正確.
怎么解釋此現(xiàn)象呢?
難道是循環(huán)用錯(cuò)了?
作者:
ly5066113
時(shí)間:
2007-12-14 16:35
這個(gè)意思?
awk 'NR==1{print "IP,"$0}NR>1{print "10.10.5.44,"$0}'
作者:
yourkeychen
時(shí)間:
2007-12-14 16:46
是的,基本上就是這個(gè)意思
不過,當(dāng)NF>1的時(shí)候
我原來的數(shù)據(jù)也許沒有加 "
現(xiàn)在想加上,所以,就想沒個(gè)字段單獨(dú)處理,
問題就是,我用$0的話,它能正常輸出,
用循環(huán)輸出$i 的話,除了 $1 后面的就沒有結(jié)果輸出了.
作者:
ly5066113
時(shí)間:
2007-12-14 16:50
數(shù)據(jù)列幾條出來。
作者:
welcome008
時(shí)間:
2007-12-14 16:59
看看你的數(shù)據(jù)文件。
作者:
yourkeychen
時(shí)間:
2007-12-14 17:03
數(shù)據(jù)有點(diǎn)長,
我舉個(gè)例子:
轉(zhuǎn)換前CSV文件:
name,age,sex,dept
張三,28,m,銷售
轉(zhuǎn)換后想得到:
ip,name,age,sex,dept
"10.10.5.44","張三","28","m","銷售"
不用循環(huán)得出結(jié)果是正確的,
用了循環(huán)得到:
ip,name,age,sex,dept
"10.10.5.44",
后面就沒有了.因?yàn)閿?shù)據(jù)中有漢字,不知道是不是有影響?
作者:
yourkeychen
時(shí)間:
2007-12-14 17:12
補(bǔ)充:
我的數(shù)據(jù)是有"的
不過將來有些數(shù)據(jù)可能沒有", 所以想在這個(gè)處理中有"的話,原樣輸出,沒有"的話,能加"
數(shù)據(jù)分隔符是 ,
作者:
ly5066113
時(shí)間:
2007-12-14 17:17
awk -F, 'NR==1{print "ip,"$0}NR>1{printf "\"10.10.5.44\",";for(i=1;i<NF;i++) printf "\"%s\"," ,$i;print "\""$NF"\""}' urfile
作者:
welcome008
時(shí)間:
2007-12-14 17:18
我這邊執(zhí)行是有輸出整行的。但有一點(diǎn),你應(yīng)該把
printf "%s",$i
應(yīng)該改為:
printf "%s,",$i
不然就沒有分隔符了。
[
本帖最后由 welcome008 于 2007-12-14 17:19 編輯
]
作者:
ly5066113
時(shí)間:
2007-12-14 17:26
awk 'BEGIN{FS=OFS=","}NR==1{print "ip,"$0}NR>1{gsub(/"/,"");for(i=1;i<=NF;i++)$i="\""$i"\"";print "\"10.10.5.44\","$0}' urfile
復(fù)制代碼
作者:
yourkeychen
時(shí)間:
2007-12-14 18:00
謝謝各位
我看了一下,我的用法應(yīng)該和你說的幾中情況都試過了
我的執(zhí)行LOG里面有AWK的下面錯(cuò)誤.
awk: 0602-562 XXXXX (亂碼)
我想,和使用漢字還是有關(guān)系.
還有文件字符集可能也有關(guān)系,(UNICODE,UTF-8,ASCII等)
我還在測試中,結(jié)果驗(yàn)證后告訴大家.
另外,$i 和 $NF 作用是一樣的嗎?
作者:
mcolinc
時(shí)間:
2007-12-14 20:08
$i指代一行中的某一域(根據(jù)i的值)
$NF指代一行中的最后一個(gè)域
作者:
welcome008
時(shí)間:
2007-12-14 21:47
把你的數(shù)據(jù)文件拷貝一份,然后只保留前幾行,試一下.
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2