列表处理
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
列表处理
小弟还有个问题,麻烦给位帮我看下
list1、list2、list3、list4,
如果list1、list2中有相同的ip,则在list1中相同IP后面追加a 放到listnew中
如果list1、list3中有相同的ip,则在list1中相同IP后面追加b 放到listnew中
如果list1、list4中有相同的ip,则在list1中相同IP后面追加b 放到listnew中
list1
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
list2
1.1.1.1
2.2.2.2
list3
3.3.3.3
4.4.4.4
list4
5.5.5.5
结果是:
listnew
1.1.1.1 a
2.2.2.2 a
3.3.3.3 b
4.4.4.4 b
5.5.5.5 c
list1、list2、list3、list4,
如果list1、list2中有相同的ip,则在list1中相同IP后面追加a 放到listnew中
如果list1、list3中有相同的ip,则在list1中相同IP后面追加b 放到listnew中
如果list1、list4中有相同的ip,则在list1中相同IP后面追加b 放到listnew中
list1
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
list2
1.1.1.1
2.2.2.2
list3
3.3.3.3
4.4.4.4
list4
5.5.5.5
结果是:
listnew
1.1.1.1 a
2.2.2.2 a
3.3.3.3 b
4.4.4.4 b
5.5.5.5 c
-
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
- 联系:
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
- 我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
- 联系:
Re: 列表处理
[bash]
#!/bin/bash
origin=list1
for o in list{2..4};do
cp $origin bak$o
for i in `diff $origin $o | awk '/^</{print $2}'`;do
sed "/$i/d" -i bak$o
done
sed "s/$/ $o/" bak$o >>listnew
done
rm baklist? -f
sed 's/list2/a/g;s/list3/b/g;s/list4/c/g' -i listnew
cat listnew
[/bash]
这方法真笨.
.哎
似乎标错了.再修改一下.
list1依次和每个list2/3/4 diff
找出不同的并删除,剩下的就是相同的.标记相同的
#!/bin/bash
origin=list1
for o in list{2..4};do
cp $origin bak$o
for i in `diff $origin $o | awk '/^</{print $2}'`;do
sed "/$i/d" -i bak$o
done
sed "s/$/ $o/" bak$o >>listnew
done
rm baklist? -f
sed 's/list2/a/g;s/list3/b/g;s/list4/c/g' -i listnew
cat listnew
[/bash]


这方法真笨.
.哎
似乎标错了.再修改一下.
list1依次和每个list2/3/4 diff
找出不同的并删除,剩下的就是相同的.标记相同的
上次由 我就是我2 在 2011-09-02 22:36,总共编辑 6 次。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
-
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
- 联系:
Re: 列表处理
严格说,这个不是100%符合你的要求,我偷懒了,这个只是把所有匹配的内容弄到新文件了。你要求是以list1为根本,也就是如果list1里有个200.200.200.200,list2,3,4里都没有的,这个200。。。也应该在结果文件,只是没有后缀。mad_frog 写了:sk1418 写了:合并省事点,你要是非不合并这个也行:
代码: 全选
awk 'ARGIND==1{a[$0]=1;next;} ARGIND==2{ if($0 in a)print $0" a">>"listnew.txt";next; } ARGIND==3{ if($0 in a)print $0" b">>"listnew.txt";next; } ARGIND==4{ if($0 in a)print $0" c">>"listnew.txt"; } ' list1 list2 list3 list4
谢谢,对我很有帮助
你可以自己按这个意思改,就是个awk数组的事。
---
regards,
Kent
regards,
Kent
- 我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
- 联系:
Re: 列表处理
fnan 写了:#后面追加c。如果list1、list4中有相同的ip,则在list1中相同IP后面追加b 放到listnew中



没看清楚.也想当然了.
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 列表处理
#for可以参考一下这个:我就是我2 写了:[bash]
#!/bin/bash
for o in list{2..4};do
cp $origin bak$o
for i in `diff $origin $o | awk '/^</{print $2}'`;do
sed "/$i/d" -i bak$o
done
sed "s/$/ $o/" bak$o >>listnew
done
rm baklist? -f
sed 's/list2/a/g;s/list3/b/g;s/list4/c/g' -i listnew
cat listnew
[/bash]
![]()
![]()
这方法真笨.
.哎
似乎标错了.再修改一下.
list1依次和每个list2/3/4 diff
找出不同的并删除,剩下的就是相同的.标记相同的
for f in list{2..4};do sort list1 $f|uniq -d|xargs -i echo {} $(tr 234 abc <<<${f/list/});done;sort list{1..4}|uniq -u
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- 我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
- 联系:
Re: 列表处理
高级货.第一次见到${f/list/}

i=j.jpg.jpg.jpg.jpg
${i/%.jpg/.gif}
替换
转格式之类...名字有新招了.
sort list{1..4}|uniq -u
后三个文件的内容是第一个内容的子集?所以无输出?
// 空行也算一元素...?
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”
自然灋則
dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!