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

  免費注冊 查看新帖 |

Chinaunix

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

搜索文件中相同字段行,并進行處理,如何做?  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2003-01-16 21:16 |只看該作者 |倒序瀏覽
假設(shè)我有如下文件:
cat aa
123   def1      456
345   def2      812
123   def3      563
322   def4      684
123   def5      879
......................
現(xiàn)在我想把第一列中字段相同的合并,第一列不相同的則保留,合并的原則就是保留第一個出現(xiàn)的前兩個字段,第三個字段則把結(jié)果相加,以上面的示例為例:

就是對于123開頭的需要合并,合并后應(yīng)該成為如下:
cat aa
123  def1   1898
345  def2   812
322  def4   684
請問用shell如何實現(xiàn)?
希望各位幫助!,謝謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2003-01-16 22:41 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

...


  1. awk ''{
  2.      if ( length(def[$1]) == 0 ) def[$1]=$2 ;
  3.      sum[$1]+=$3 ;
  4. }
  5. END {
  6.     for (i in def)  {
  7.        print i, def[i] , sum[i]
  8.     }
  9. }'' aa
復(fù)制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2003-01-16 22:51 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

謝謝,紅袖添香。我試試看。

論壇徽章:
0
4 [報告]
發(fā)表于 2003-01-17 14:57 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

測試結(jié)果發(fā)現(xiàn)會改變原來的順序。
怎樣才能不改變順序呢?
其中的:
length(def[$1])==0)什么意思阿?謝謝!

論壇徽章:
0
5 [報告]
發(fā)表于 2003-01-17 15:09 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

另外我的aa文件里面的第二列def*不一定是有規(guī)律的,比如說可能是fdas yuri 等等,謝謝!

論壇徽章:
0
6 [報告]
發(fā)表于 2003-01-17 16:55 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

[quote]原帖由 "hfzheng"]什么意思阿?謝謝![/quote 發(fā)表:

如果def[$1]是空值(即def[$1]還沒有值是讓他=$2

論壇徽章:
0
7 [報告]
發(fā)表于 2003-01-17 17:14 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

原帖由 "hfzheng" 發(fā)表:

測試結(jié)果發(fā)現(xiàn)會改變原來的順序。
怎樣才能不改變順序呢?


昨天的代碼沒有考慮這個而且不是最佳的,這個好點


  1. awk ''{
  2.      if ( length(def[$1]) == 0 ) def[$1]=$2  
  3.      sum[$1]+=$3  
  4.      if ( $1 in ind ) next
  5.      ind[$1]
  6.      print
  7. }'' aa
復(fù)制代碼

另外我的aa文件里面的第二列def*不一定是有規(guī)律的,比如說可能是fdas yuri 等等,謝謝!


這個沒有關(guān)系,不一定要有規(guī)律。def[$1] 完全可以取其它名字,只是為了和你的源文件配套好理解一點而已。

[quote]原帖由 "nkliyong"]如果def[$1]是空值(即def[$1]還沒有值是讓他=$2[/quote 發(fā)表:


多謝 nkliyong 代勞,呵呵。

論壇徽章:
0
8 [報告]
發(fā)表于 2003-01-17 21:53 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

測試了新代碼:
    已經(jīng)不會改變行順序,不過我好像發(fā)覺現(xiàn)在第三行不加了(新代碼)。還是保留原來的值,我再試試是不是我的寫法有問題,謝謝兩位!

論壇徽章:
0
9 [報告]
發(fā)表于 2003-01-17 22:04 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

...

不用試了,是我搞錯了。忘記這碴了,:P  sum 根本沒用上。

那我還得想一下。

論壇徽章:
0
10 [報告]
發(fā)表于 2003-01-17 22:20 |只看該作者

搜索文件中相同字段行,并進行處理,如何做?

...



基本上是這樣的:

這樣的關(guān)聯(lián)數(shù)組求和問題,到最后的順序是會改變的。因為 awk 為了能夠代碼執(zhí)行效率,數(shù)組會以哈希表的形式放在內(nèi)存中,于是象 sum 這樣的數(shù)組中的鍵 i 不會按照你給的原來的順序。

可能得另外再做個函數(shù)來保留原來的順序,或是重排。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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