当前位置: 技术问答>linux和unix
求教shell编程 谢谢!
来源: 互联网 发布时间:2016-12-30
本文导语: 1.文件a,每行两列,格式为url ip,文件b每行一列,格式为url,通过awk实现找出b文件中的url是否在a文件中,如存在,将此url和对应的ip输出(文件大小不考虑) 2.通过sed实现将包含aaaa的行删除,同时将包...
1.文件a,每行两列,格式为url ip,文件b每行一列,格式为url,通过awk实现找出b文件中的url是否在a文件中,如存在,将此url和对应的ip输出(文件大小不考虑)
2.通过sed实现将包含aaaa的行删除,同时将包含bbbb的行替换为cccc
3. 通过grep匹配相关的url,并提取出file名,规则为:以http://开始,主域为tt.com,二级目录为不包含大写字母的非目录型url,如http://abc.tt.com/123abc/filename.html符合规则,file名为filename
2.通过sed实现将包含aaaa的行删除,同时将包含bbbb的行替换为cccc
3. 通过grep匹配相关的url,并提取出file名,规则为:以http://开始,主域为tt.com,二级目录为不包含大写字母的非目录型url,如http://abc.tt.com/123abc/filename.html符合规则,file名为filename
|
1. awk 'NR==FNR{a[$0]}NR>FNR{if($1 in a)print}' b a
或 awk 'ARGIND==1{a[$0]}ARGIND>1{if($1 in a)print}' b a
2. LZ的意思是把bbbb的行换成cccc,楼上都有问题
答案:sed '/aaaa/d;/bbbb/ccccc'
3.域名是否定长?如果定长用一个grep应该差不多,不定长用awk更好
grep -Po '(?FNR&&a[$1]{print $1,a[$1]}' a b
http://www.sina.com.cn 218.106.86.93
http://www.163.com.cn 218.211.8.16
第2个:
sed -e 's/bbbb/cccc/g;/aaaa/d' xx
或 awk 'ARGIND==1{a[$0]}ARGIND>1{if($1 in a)print}' b a
2. LZ的意思是把bbbb的行换成cccc,楼上都有问题
答案:sed '/aaaa/d;/bbbb/ccccc'
3.域名是否定长?如果定长用一个grep应该差不多,不定长用awk更好
grep -Po '(?FNR&&a[$1]{print $1,a[$1]}' a b
http://www.sina.com.cn 218.106.86.93
http://www.163.com.cn 218.211.8.16
第2个:
sed -e 's/bbbb/cccc/g;/aaaa/d' xx
|
首先cat b a是输出b和a的内容,例如
http://www.sina.com.cn
http://www.163.com.cn
http://www.ddd.com
http://www.sina.com.cn 218.106.86.93
http://www.163.com.cn 218.211.8.16
http://www.qq.com.cn 218.34.12.32
http://www.tt.com.cn 218.112.86.93
http://www.sohu.com.cn 218.106.82.91
然后if(NF==1)f[$1]=1是指
当一行只有一列的时候,记录该行的信息,如f[http://www.sina.com.cn]=1,
这样b文件中的每个url都会等于1.
else if(f[$1]>0)print
当读到a的时候,如果f[$1]>0则代表是b有的,如果b没有的则f[$1]=0,
最后就输出
不知道这样讲你是否清楚
|
f[$1]=1 是在标记 ,f[http://www.sina.com.cn] = 1. if(f[$1]>0)就是在判断,url有没有标记过.
|
第一题:
cat b a | awk '{if(NF==1)f[$1]=1;else if(f[$1]>0)print}'
第二题:
sed -e 's/bbbb/cccc/g;/aaaa/d' xx
cat b a | awk '{if(NF==1)f[$1]=1;else if(f[$1]>0)print}'
第二题:
sed -e 's/bbbb/cccc/g;/aaaa/d' xx
|
sed '/aaaa/d;s/bbbb/cccc' xx.txt