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

Chinaunix

標(biāo)題: 如何整合三個(gè)文件的內(nèi)容呢? [打印本頁]

作者: netlogon    時(shí)間: 2009-06-17 15:03
標(biāo)題: 如何整合三個(gè)文件的內(nèi)容呢?
三個(gè)文件的內(nèi)容如下:

  1. [root@localhost shell]# cat index
  2. 0 112
  3. 1 16
  4. 2 320
  5. 3 336
  6. 4 48
  7. 5 80
  8. 6 96
  9. [root@localhost shell]# cat name
  10. 0  server1
  11. 1  server2
  12. 2  server3
  13. 3  server4
  14. 4  server5
  15. 5  server6
  16. 6  server7
  17. [root@localhost shell]# cat mem
  18. 16 62912
  19. 48 15728
  20. 80 34076
  21. 96 10484
  22. 112 28832
  23. 336 26212
  24. [root@localhost shell]#
復(fù)制代碼


我想得到如下的效果:

  1. # cat last
  2. 0 112 server1 28832
  3. 1 16 server2 62912
  4. 2 320 server3
  5. 3 336 server4 26212
  6. 4 48 server5 15728
  7. 5 80 server6 34076
  8. 6 96 server7  10484
復(fù)制代碼


請教如何呢?謝謝
作者: greendays    時(shí)間: 2009-06-17 15:46
標(biāo)題: 回復(fù) #1 netlogon 的帖子
第一步:paste index name | awk '{$3=""}1' >notlast
第二步:
[root@localhost lianshou]# cat notlast
0 112  server1
1 16  server2
2 320  server3
3 336  server4
4 48  server5
5 80  server6
6 96  server7
第三步:
awk 'NR==FNR{a[$1]=$2;next}$2 in a{ print $0,a[$2]}!($2 in a){print}' mem notlast
0 112  server1 28832
1 16  server2 62912
2 320  server3
3 336  server4 26212
4 48  server5 15728
5 80  server6 34076
6 96  server7 10484
作者: ILoveMK    時(shí)間: 2009-06-17 15:48
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: ly5066113    時(shí)間: 2009-06-17 15:52
標(biāo)題: 回復(fù) #1 netlogon 的帖子
try

  1. awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{print $0,n[$1],m[$2]}' name mem index
復(fù)制代碼

作者: 老古董    時(shí)間: 2009-06-17 15:56
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: gyp334a    時(shí)間: 2009-06-17 15:57
笨人的笨方法
join index name > a
sort mem > b
join -a1 -a2 -j1 2 -j2 1 a b | awk '{print $2,$1,$3,$4}'
作者: ywlscpl    時(shí)間: 2009-06-17 16:24
這種問題用awk處理是最合適的
作者: netlogon    時(shí)間: 2009-06-17 17:25
原帖由 ly5066113 于 2009-6-17 15:52 發(fā)表
try

awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{print $0,n[$1],m[$2]}' name mem index



如果不止三個(gè)文件呢?

例如:

  1. [root@localhost shell]# cat /tmp/index
  2. 0 112
  3. 1 16
  4. 2 320
  5. 3 336
  6. 4 48
  7. 5 80
  8. 6 96
  9. [root@localhost shell]# cat /tmp/name
  10. 0       server1
  11. 1       server2
  12. 2       server3
  13. 3       server4
  14. 4       server5
  15. 5       server6
  16. 6       server7
  17. [root@localhost shell]# cat /tmp/memtatol
  18. 16 262144
  19. 48 524288
  20. 80 262144
  21. 96 262144
  22. 112 262144
  23. 336 262144
  24. [root@localhost shell]# cat /tmp/memused
  25. 16 70776
  26. 48 10484
  27. 80 34076
  28. 96 18348
  29. 112 20968
  30. 336 23592
  31. [root@localhost shell]# cat /tmp/cpuused
  32. 16 139300
  33. 17 98012
  34. 48 89978
  35. 80 103676
  36. 96 92172
  37. 112 94314
  38. 336 102839
復(fù)制代碼

作者: kwokcn    時(shí)間: 2009-06-17 17:39
標(biāo)題: 回復(fù) #8 netlogon 的帖子
那就再多整幾個(gè)"ARGIND==xxx"做記錄。
作者: netlogon    時(shí)間: 2009-06-17 17:43
原帖由 kwokcn 于 2009-6-17 17:39 發(fā)表
那就再多整幾個(gè)"ARGIND==xxx"做記錄。


呵呵,不明白
難道是:

  1. awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{m[$1]=$2}ARGIND==4{m[$1]=$2}ARGIND==5{print $0,n[$1],m[$2]}' /tmp/name /tmp/memtatol /tmp/memused /tmp/cpuused /tmp/index
復(fù)制代碼


結(jié)果好像又不對.......
作者: ubuntuer    時(shí)間: 2009-06-17 20:44
  1. awk 'ARGIND==1{a[$1]=$2}ARGIND==2{b[$1]=$2}ARGIND==3{print $0,b[$1],a[$2]}' mem name index
復(fù)制代碼

作者: kwokcn    時(shí)間: 2009-06-17 20:50
標(biāo)題: 回復(fù) #10 netlogon 的帖子
得先理解awk的數(shù)組啊。


  1. awk 'ARGIND==1{n[$1]=$2}ARGIND==2{m[$1]=$2}ARGIND==3{a[$1]=$2}ARGIND==4{b[$1]=$2}ARGIND==5{print $0,n[$1],m[$2],a[$2],b[$2]}' /tmp/name /tmp/memtatol /tmp/memused /tmp/cpuused /tmp/index
復(fù)制代碼

作者: 可惡的    時(shí)間: 2009-06-17 20:52
awk 'ARGIND==1{a[$1]=$2}ARGIND==2{b[$1]=$2}ARGIND==3{c[$1]=$2}ARGIND==4{print $0,a[$1],b[$2],c[$2]}' /tmp/name /tmp/memtotal /tmp/memused /tmp/index
依次類推。
由于name文件匹配index的$1,故取a[$1],且name文件輸入必須在memtotal,memused前面。
memtotal,memused,cpuused都是匹配index的$2,故取b[$2],c[$2]...
自己多測試下就行了,index文件再弄個(gè)$3測試下,多總結(jié)下。
作者: 可惡的    時(shí)間: 2009-06-17 20:55
作為輸入文件,name必須在memtotal,cpuused前面,memtotal和cpuused的輸入順序可以隨意,index必須在最后面。
作者: netlogon    時(shí)間: 2009-06-18 17:23
受用了,感謝
不過理解的還是有點(diǎn)困難
如果現(xiàn)在有這個(gè)種情況,又該如何呢?

  1. [root@localhost shell]# cat index
  2. 0 112
  3. 1 16
  4. 2 320
  5. 3 336
  6. 4 48
  7. 5 80
  8. 6 96
  9. [root@localhost shell]# cat name
  10. 0       server1
  11. 1       server2
  12. 2       server3
  13. 3       server4
  14. 4       server5
  15. 5       server6
  16. 6       server7
  17. [root@localhost shell]# cat kbtx
  18. 1 462046
  19. 2 27
  20. 3 704358
  21. 4 661075
  22. 5 703342
  23. 6 239
  24. 7 4942
  25. 8 37
  26. 9 314688
  27. 10 343032
  28. 11 827607

  29. [root@localhost shell]# cat netid
  30. 1 112
  31. 2 112
  32. 3 16
  33. 4 16
  34. 5 336
  35. 6 336
  36. 7 48
  37. 8 48
  38. 9 80
  39. 10 96
  40. 11 96
  41. [root@localhost shell]#
復(fù)制代碼


需要的結(jié)果:
  1. [root@localhost shell]#  cat last
  2. 1 112 0 server1 462046
  3. 2 112 0 server1 27
  4. 3 16 1 server2 704358
  5. 4 16 1 server2  661075
  6. 5 336 2 server3 703342
  7. 6 336 2 server3 239
  8. 7 48 4 server5 4942
  9. 8 48 4 server5  37
  10. 9 80 5 server6 314688
  11. 10 96 6 server7  343032
  12. 11 96 6 server7 827607
復(fù)制代碼

[ 本帖最后由 netlogon 于 2009-6-18 17:36 編輯 ]
作者: 可惡的    時(shí)間: 2009-06-18 20:08
awk 'ARGIND==1{a[$2]=$1}ARGIND==2{print $0,a[$2]>"last"}' index netid && awk 'ARGIND==1{m[$1]=$2}ARGIND==2{n[$1]=$2}ARGIND==3{print $0,m[$3],n[$1]>"last"}' name kbtx last

awk不熟,數(shù)組還得好好研究,這樣可以。
作者: kwokcn    時(shí)間: 2009-06-18 20:12
標(biāo)題: 回復(fù) #15 netlogon 的帖子
man一下awk,或者找點(diǎn)awk資料看。

ARGIND可以按照C/C++中main函數(shù)argv的下標(biāo)來理解,數(shù)組可以按照STL的map來理解。
要處理這類問題,找好對應(yīng)關(guān)系就行了。后面這個(gè)問題和前面相比無非就是換了哈希表的key和value而已。


  1. awk 'ARGIND==1{a[$2]=$1}ARGIND==2{b[$1]=$2}ARGIND==3{c[$1]=$2}ARGIND==4{print $0,a[$2],b[a[$2]],c[$1]}' index name kbtx netid
復(fù)制代碼





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2