亚洲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
  1. [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
  2. 104.13 30.20 0.023
  3. 105.23 32.57 -0.1335
  4. 103.31 30.35 -0.0123
  5. 103.01 29.98 -0.0091
  6. 104.73 31.44 0.1693
  7. 106.37 30.11 0.0126
  8. 105.12 29.62 0.0123
  9. 103.76 30.91 0.2355
  10. 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)該可以了.
  1. awk 'NR==FNR{a[$1,$2]=-1;next} {m=sprintf("%.2f",$1);n=sprintf("%.2f",$2)}!++a[m,n]' test1 test2
  2. 103.75        29.57        0.0035
  3. 104.73        31.44        0.1693
  4. 105.12        29.62        0.0123
  5. 103.76        30.91        0.2355
  6. 103.01        29.98        -0.0091
  7. 106.37        30.11        0.0126
  8. 104.13        30.2         0.023
  9. 103.31        30.35        -0.0123
  10. 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