grep一个长度的单词并选择它下面的n行,直到找到相同长度的单词

时间:2017-08-16 02:41:04

标签: shell grep lines word

我在unix环境中有一个包含数据的文本文件,我正在使用shell脚本对该文件执行一些操作以获取一些特定数据。文件数据如下:

USA
11111111111111111111111111
22222222222222222222222222
33333333333333333333333333
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
USA
99999999999999999999999999
10101010101010101010101010
20202020202020202020202020
50050505050005050505050505
USA
20020202022222020222220202
30303333033030333030303330
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD
NAE
DDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEE
JJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKK

我想得到阿联酋以下的数据。即我期待这样的输出: 预期产出:

UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD

2 个答案:

答案 0 :(得分:1)

您可以使用awk来实现目标,

$ awk 'length($0)==3{a=($0=="UAE")?1:0}a' file

简要说明,

  • 使用标记a确定是否打印记录
  • length($0)==3 $0=="UAE",当且仅当length($0)!=3时,设置a = 1,否则a = 0
  • 如果a,请保留SELECT something FROM table WITH (UPDLOCK) /* update locks released */ 以前的内容。

答案 1 :(得分:0)

$ awk -v s=UAE '$0==s||p{p=(length($0)==length(s)?$0==s:p)}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD

说明:

$ awk -v s=UAE '                          # pass the string as variable
    $0==s||p {                            # enable p rinting if s tring matches
        p=(length($0)==length(s)?$0==s:p) # non-matching samelength string disables p 
    }
    p' file

编辑: awk中的另一个:

$ awk -v s=UAE '$0==s||length($0)==length(s)&&$0!=s&&p{p=$0==s}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD