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

Chinaunix

標(biāo)題: 文件內(nèi)容的比較與替換問題 [打印本頁]

作者: minix    時(shí)間: 2008-11-27 21:38
標(biāo)題: 文件內(nèi)容的比較與替換問題
現(xiàn)有A文件內(nèi)容如下,域分割符為“:”
1:a
2:b
3:c
4:d
5:e
.
.
.

B文件的內(nèi)容如下,域分割符為“:”
1:1
2:2
3:4
4:5
5:3
.
.
.

問題:比較B文件第一個(gè)域與第二個(gè)域的內(nèi)容,如果第一域的內(nèi)容與第二個(gè)域的內(nèi)容不相等,(如:B文件的第三行3!=4),那么在A文件中找到第一域的內(nèi)容等于3的行,并將A文件的第一個(gè)域的內(nèi)容替換成B文件的第二個(gè)域的內(nèi)容(即將A文件的第三行的3替換為4)。有點(diǎn)亂,不知道有沒有說清楚。最終得到的A文件的內(nèi)容如下:

1:a
2:b
4:c
5:d
3:e
.
.
.
請(qǐng)大家多多指教
作者: biglazybug    時(shí)間: 2008-11-27 21:58
標(biāo)題: 回復(fù) #1 minix 的帖子
LZ 那兩個(gè)文件的第一個(gè)域的值是相同的?有沒有重復(fù)的呢
作者: minix    時(shí)間: 2008-11-27 22:02
標(biāo)題: 回復(fù) #2 biglazybug 的帖子
沒有重復(fù)的
作者: walkerxk    時(shí)間: 2008-11-27 22:15
你是不是要把兩個(gè)文件的第二列合并起來?
paste <(cut -d: -f2 B) <(cut -d: -f2 A)|sed 's,\t,:,'
作者: biglazybug    時(shí)間: 2008-11-27 22:21
awk -v OFS=":" -F ":" 'FNR==NR {if($1!=$2) a[$1]=$2} FNR<NR{$1=(a[$1]?a[$1]1);print }' B A
作者: minix    時(shí)間: 2008-11-27 22:24
原帖由 walkerxk 于 2008-11-27 22:15 發(fā)表
你是不是要把兩個(gè)文件的第二列合并起來?
paste  


不是,先要判斷A文件的1、2列,如果不等,在把A文件的第一列用B文件的第二列替換掉,A文件與B文件的行不一定相等,要經(jīng)過判斷才替換的,謝謝
作者: minix    時(shí)間: 2008-11-27 22:29
原帖由 biglazybug 于 2008-11-27 22:21 發(fā)表
awk -v OFS=":" -F ":" 'FNR==NR {if($1!=$2) a[$1]=$2} FNR


非常感謝biglazybug的支持,問題終于得到了解決,非常感謝!!
作者: ynchnluiti    時(shí)間: 2008-11-27 23:27
原帖由 biglazybug 于 2008-11-27 22:21 發(fā)表
awk -v OFS=":" -F ":" 'FNR==NR {if($1!=$2) a[$1]=$2} FNR

$1=(a[$1]?a[$1]1; => if ($1 in a) $1=a[$1];
作者: biglazybug    時(shí)間: 2008-11-27 23:29
標(biāo)題: 回復(fù) #8 ynchnluiti 的帖子
嘿嘿 andy大蝦 我那么寫會(huì)出現(xiàn)什么樣的問題呢 請(qǐng)指教
作者: minix    時(shí)間: 2008-11-27 23:44
標(biāo)題: 回復(fù) #9 biglazybug 的帖子
一樣的意思啊,呵呵,不過if ($1 in a) $1=a[$1]看上去更容易看懂,$1=(a[$1]?a[$1]1)這個(gè)我是想了下才弄明白的,小的才疏學(xué)淺啊,哈哈,學(xué)習(xí)ing
作者: ynchnluiti    時(shí)間: 2008-11-27 23:51
原帖由 biglazybug 于 2008-11-27 23:29 發(fā)表
嘿嘿 andy大蝦 我那么寫會(huì)出現(xiàn)什么樣的問題呢 請(qǐng)指教

$1=(a[$1]?a[$1]1; 會(huì)增加a數(shù)組元素,a[1], a[2], .. 也可以寫成這樣:$1=($1 in a)?a[$1]1;
  1. $ awk 'BEGIN{FS=OFS=":"} FNR==NR{if ($2!=$1) a[$1]=$2} FNR<NR{$1=a[$1]?a[$1]:$1;print}END{print "---Hash--------";for (i in a) print i":\t\""a[i]"\""}' B A
  2. 1:a
  3. 2:b
  4. 4:c
  5. 5:d
  6. 3:e

  7. ---Hash--------
  8. :       ""
  9. 4:      "5"
  10. 5:      "3"
  11. 1:      ""
  12. 2:      ""
  13. 3:      "4"
  14. $ awk 'BEGIN{FS=OFS=":"} FNR==NR{if ($2!=$1) a[$1]=$2} FNR<NR{$1=($1 in a)?a[$1]:$1;print}END{print "---Hash--------";for (i in a) print i":\t\""a[i]"\""}' B A   
  15. 1:a
  16. 2:b
  17. 4:c
  18. 5:d
  19. 3:e

  20. ---Hash--------
  21. 4:      "5"
  22. 5:      "3"
  23. 3:      "4"
復(fù)制代碼

http://www.chinaunix.net/index.p ... ead.php?tid=1308418

[ 本帖最后由 ynchnluiti 于 2008-11-27 23:52 編輯 ]
作者: ynchnluiti    時(shí)間: 2008-11-27 23:56
原帖由 minix 于 2008-11-27 23:44 發(fā)表
一樣的意思啊,呵呵,不過if ($1 in a) $1=a[$1]看上去更容易看懂,$1=(a[$1]?a[$1]1)這個(gè)我是想了下才弄明白的,小的才疏學(xué)淺啊,哈哈,學(xué)習(xí)ing

有區(qū)別。后面的寫法會(huì)占用更多內(nèi)存,不過文件不大時(shí)影響可以忽略。
主要是要知道直接寫a[x],就會(huì)增加或更新索引為x的元素。最好使用in判斷。
作者: minix    時(shí)間: 2008-11-28 00:12
謝謝二位大嚇,小的長進(jìn)不少
作者: biglazybug    時(shí)間: 2008-11-28 08:46
標(biāo)題: 回復(fù) #12 ynchnluiti 的帖子
哦 呵呵 理解了




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