Chinaunix

标题: 用sed或awk实现:如果后一行包含前一行的内容,则前面的行不打印。多谢! [打印本页]

作者: xiaoshichao143    时间: 2015-03-18 14:35
标题: 用sed或awk实现:如果后一行包含前一行的内容,则前面的行不打印。多谢!
用sed或awk实现:如果后一行包含前一行的内容,则前面的行不打印,如:

a
a/b
a/b/c
a/b/c/d
a/b/c/d/e
a/b/c/d/e/f
b
b/b
b/e
b/e/f

只打印:
a/b/c/d/e/f
b/b
b/e/f
作者: WilliBhamlll    时间: 2015-03-18 14:43
  1. sed 'N;/^\(.*\)\n\1/!P;D' file
复制代码

作者: zsszss0000    时间: 2015-03-18 14:44
本帖最后由 zsszss0000 于 2015-03-18 14:44 编辑
  1. awk '{if($0!~str)print str;str=$0;}END{print str}' file
复制代码
  1. a/b/c/d/e/f
  2. b/b
  3. b/e/f
复制代码

作者: 我是一隻羊    时间: 2015-03-18 15:42
  1. awk '{a[NR]=$0}END{for(i=0;i++<NR;)printf a[i+1]!~a[i]?a[i]"\n":""}' inputfile
复制代码

作者: 聆雨淋夜    时间: 2015-03-18 15:48
  1. sed -r ':1;N;s/^(.*)\n(\1.*)/\2/;t1;P;D' file
  2. a/b/c/d/e/f
  3. b/b
  4. b/e/f
复制代码

作者: xiaoshichao143    时间: 2015-03-18 16:06
回复 2# WilliBhamlll


    非常感谢!!
作者: xiaoshichao143    时间: 2015-03-18 16:07
多谢大侠们的解答!!
作者: 聆雨淋夜    时间: 2015-03-18 16:11
回复 4# 我是一隻羊
赞一个


   
作者: zhxjfl    时间: 2015-03-18 16:46
本帖最后由 zhxjfl 于 2015-03-18 16:46 编辑

sed -r 'N;/^(.*)\n.*\1/!P;D' file
作者: blackold    时间: 2015-03-19 09:06
回复 1# xiaoshichao143


    求最深路径吧。
作者: nswcfd    时间: 2015-03-19 18:57
受教!
回复 5# 聆雨淋夜


   
作者: nswcfd    时间: 2015-03-19 18:59
学习了!
回复 9# zhxjfl


   
作者: 我爱你我的菜    时间: 2015-09-09 13:07
回复 3# zsszss0000


    学习了
作者: 我爱你我的菜    时间: 2015-09-09 13:11
awk -v RS="" '{for(i=2;i<=NF;i++){if($i!~$(i-1)) print $(i-1)}}END{print $NF}' test.txt





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2