亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
兩個(gè)文件的連接處理
[打印本頁(yè)]
作者:
yujianshengahtz
時(shí)間:
2015-09-21 11:22
標(biāo)題:
兩個(gè)文件的連接處理
本帖最后由 yujianshengahtz 于 2015-09-21 15:20 編輯
有兩個(gè)文件test1和test2,test2中內(nèi)容包含test1內(nèi)容,要根據(jù)test1的經(jīng)緯度值提取出對(duì)應(yīng)的test2中的內(nèi)容,
嘗試過用join,但沒成功,請(qǐng)問有什么辦法可以解決這個(gè)問題嗎?
cat test1:
103.75 29.57
104.73 31.44
105.12 29.62
103.76 30.91
103.01 29.98
106.37 30.11
104.13 30.20
103.31 30.35
105.23 32.57
cat test2:
103.75 29.57 0.0035
104.55 31.01 0.1128
104.06 30.64 0.0755
104.73 31.44 0.1693
105.12 29.62 0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
104.55 30.39 0.0382
106.37 30.11 0.0126
104.43 29.46 0.0047
104.13 30.2 0.023
103.31 30.35 -0.0123
105.35 29.53 0.0101
105.23 32.57 -0.1335
104.83 32.18 0.4361
104.44 31.8 0.8829
104.19 31.35 0.4643
104.44 31.16 0.1558
103.69 31.06 0.5268
103.14 31.01 -0.5298
102.31 31.71 -0.1233
104.25 31.51 0.5495
103.58 30.87 0.0699
104.69 32.36 -0.5133
103.64 30.62 0.0147
105.23 32.57 -0.1335
希望join后是這樣的:
103.75 29.57 0.0035
104.73 31.44 0.1693
105.12 29.62 0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
106.37 30.11 0.0126
104.13 30.2 0.023
103.31 30.35 -0.0123
105.23 32.57 -0.1335
作者:
jeffreyst
時(shí)間:
2015-09-21 11:56
本帖最后由 jeffreyst 于 2015-09-21 15:29 編輯
樓主的需求應(yīng)該是查找文件2中匹配文件1 的行吧,
如果是這樣grep -f 1 2,是不是就可以了
----------------------------------------------------------上面這個(gè)grep不行,請(qǐng)忽略
awk '{if(NR==FNR){a[$1,$2]=$0}else{b[$1,$2]=$0}}END{for(i in a){if(i in b){print b
}}}' 1 2
103.31 30.35 -0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
105.12 29.62 0.0123
103.75 29.57 0.0035
106.37 30.11 0.0126
105.23 32.57 -0.1335
104.73 31.44 0.1693
試試這個(gè),看結(jié)果對(duì)不
作者:
su8610
時(shí)間:
2015-09-21 12:16
[nick@Nick_OpenClient test]$ awk '{if(NR!=FNR){a[$1,$2]=$3}else{b[$1,$2]=$1" "$2}}END{for(i in b)print b[i],a[i]}' a1 a2
104.13 30.20 0.023
105.23 32.57 -0.1335
103.31 30.35 -0.0123
103.01 29.98 -0.0091
104.73 31.44 0.1693
106.37 30.11 0.0126
105.12 29.62 0.0123
103.76 30.91 0.2355
103.75 29.57 0.0035
復(fù)制代碼
這樣可以,順便解釋一下,使用NR!=FNR是表示處理第二個(gè)文件,可以看到后面跟著的是a[$1,$2]=$3,就是搞了以$1,$2為下標(biāo)的數(shù)組,然后對(duì)應(yīng)的值為$3,后面else的意思是在處理第一個(gè)文件的時(shí)候,也是一個(gè)數(shù)組,同樣以$1,$2為下標(biāo),但是值就不同了,因?yàn)槲覀円蛴〉慕Y(jié)果是$1 $2 $3, 所以就將第二個(gè)數(shù)列的值為$1" "$2。然后對(duì)第二個(gè)數(shù)列的下標(biāo)遍歷,打印出來就是了
但是處理的過程中我發(fā)現(xiàn)個(gè)問題,有一行104.13 30.2這個(gè)在第一個(gè)文件里是30.20但是在第二個(gè)文件里30.2,在匹配的過程中這個(gè)是不會(huì)匹配的,所以文件的內(nèi)容最好一致,不知道有沒有什么辦法可以統(tǒng)一一下,請(qǐng)高手指點(diǎn)
作者:
Herowinter
時(shí)間:
2015-09-21 12:25
回復(fù)
1#
yujianshengahtz
awk 'NR==FNR{a[$1,$2];next} ($1,$2) in a' test1 test2
103.75 29.57 0.0035
104.73 31.44 0.1693
105.12 29.62 0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
106.37 30.11 0.0126
103.31 30.35 -0.0123
105.23 32.57 -0.1335
105.23 32.57 -0.1335
作者:
Herowinter
時(shí)間:
2015-09-21 12:26
回復(fù)
2#
jeffreyst
文件1 2兩列間的空格數(shù)不一樣得不到正確的結(jié)果的.
作者:
su8610
時(shí)間:
2015-09-21 12:40
回復(fù)
5#
Herowinter
請(qǐng)問awk默認(rèn)不是將連續(xù)空格作為分隔符么?為什么空格不一樣會(huì)識(shí)別不出?
作者:
jason680
時(shí)間:
2015-09-21 13:09
@Herowinter
@su8610
@yujianshengahtz
>> ..有一行104.13
30.2
這個(gè)在第一個(gè)文件里是
30.20
但是在第二個(gè)文件里30.2,在匹配的過程中這個(gè)是不會(huì)匹配的...
$ awk 'function N(num){return(
sprintf("%.2f",num)
)}FNR==NR{a[N($1),N($2)]=$3;next}{printf("%s %s %8.4f\n",$1,$2,a[N($1),N($2)])}' test2 test1
103.75 29.57 0.0035
104.73 31.44 0.1693
105.12 29.62 0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
106.37 30.11 0.0126
104.13 30.20 0.0230
103.31 30.35 -0.0123
105.23 32.57 -0.1335
作者:
yujianshengahtz
時(shí)間:
2015-09-21 14:44
直接grep -f好像不可以吧 我試了沒反應(yīng)
作者:
jeffreyst
時(shí)間:
2015-09-21 15:00
回復(fù)
4#
Herowinter
對(duì)對(duì),我忽略這個(gè)了,哈哈,多謝提醒!
作者:
su8610
時(shí)間:
2015-09-21 15:00
回復(fù)
7#
jason680
謝謝,學(xué)習(xí)了
作者:
jeffreyst
時(shí)間:
2015-09-21 15:01
回復(fù)
8#
yujianshengahtz
我那個(gè)思路確實(shí)有問題,請(qǐng)忽略
作者:
jeffreyst
時(shí)間:
2015-09-21 15:31
回復(fù)
4#
Herowinter
winter兄,你的結(jié)果中最后兩行是一樣的,不過你這個(gè)思路非常好,膜拜下
作者:
yujianshengahtz
時(shí)間:
2015-09-21 20:49
回復(fù)
7#
jason680
不好意思 數(shù)據(jù)是原始數(shù)據(jù) 我沒有整理格式
作者:
聆雨淋夜
時(shí)間:
2015-09-21 23:21
回復(fù)
7#
jason680
jason680你好,想請(qǐng)教你一下,awk中的格式化輸出,有沒有總結(jié)帖,我總是記不住awk中的格式化輸出寫法。
作者:
jason680
時(shí)間:
2015-09-21 23:53
回復(fù)
14#
聆雨淋夜
OFS or printf/sprintf
awk初學(xué)之常見問題
http://www.72891.cn/thread-2309494-1-1.html
[學(xué)習(xí)共享] 文本編輯的一點(diǎn)心得--awk篇
http://www.72891.cn/thread-1790335-1-1.html
作者:
yujianshengahtz
時(shí)間:
2015-09-22 08:37
回復(fù)
3#
su8610
謝謝您的回答還有注釋,讓我認(rèn)識(shí)了awk的不一般
至于數(shù)據(jù)格式不統(tǒng)一可以用標(biāo)準(zhǔn)輸出轉(zhuǎn)換以下就可以了,我給的是原始數(shù)據(jù),沒給轉(zhuǎn)
作者:
yujianshengahtz
時(shí)間:
2015-09-22 10:16
回復(fù)
4#
Herowinter
謝謝回答
1. 請(qǐng)問 您能說明一下這個(gè)命令的詳細(xì)含義嗎?
2. 運(yùn)行后有一行重復(fù):105.23 32.57 -0.1335
作者:
Herowinter
時(shí)間:
2015-09-22 10:36
回復(fù)
17#
yujianshengahtz
test2文件里這一行出現(xiàn)了2次, 我的代碼處理得不好,
還有Jason大神指出了30.2這里也有bug,我改了下,
這樣應(yīng)該可以了.
awk 'NR==FNR{a[$1,$2]=-1;next} {m=sprintf("%.2f",$1);n=sprintf("%.2f",$2)}!++a[m,n]' test1 test2
103.75 29.57 0.0035
104.73 31.44 0.1693
105.12 29.62 0.0123
103.76 30.91 0.2355
103.01 29.98 -0.0091
106.37 30.11 0.0126
104.13 30.2 0.023
103.31 30.35 -0.0123
105.23 32.57 -0.1335
復(fù)制代碼
作者:
fh21_xuejinlian
時(shí)間:
2016-05-16 17:32
awk 'NR==FNR{a[$0]++}ENDNR!=FNR && a[$1" "$2]++{print $0}' file1 file2
作者:
_R__
時(shí)間:
2016-05-17 09:31
awk 'NR==FNR{gsub(" +"," ");a[+$1,+$2]=$0;next}{print a[+$1,+$2]}' test2 test1
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2