grep 一个一定长度的单词并选择它下面的 n 行,直到找到相同长度的单词
grep a word of some length and pick the n lines below it untill the same length word is found
我在 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
您可以使用 awk
来实现您的目标,
$ awk 'length([=10=])==3{a=([=10=]=="UAE")?1:0}a' file
简要说明,
- 使用标志
a
确定是否打印记录
- 当
length([=13=])==3
时,当且仅当[=14=]=="UAE"
时,设a=1,否则a=0
- 如果
length([=15=])!=3
,保持 a
以前的状态。
$ awk -v s=UAE '[=10=]==s||p{p=(length([=10=])==length(s)?[=10=]==s:p)}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD
解释:
$ awk -v s=UAE ' # pass the string as variable
[=11=]==s||p { # enable p rinting if s tring matches
p=(length([=11=])==length(s)?[=11=]==s:p) # non-matching samelength string disables p
}
p' file
编辑: awk 中的另一个:
$ awk -v s=UAE '[=12=]==s||length([=12=])==length(s)&&[=12=]!=s&&p{p=[=12=]==s}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD
我在 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
您可以使用 awk
来实现您的目标,
$ awk 'length([=10=])==3{a=([=10=]=="UAE")?1:0}a' file
简要说明,
- 使用标志
a
确定是否打印记录 - 当
length([=13=])==3
时,当且仅当[=14=]=="UAE"
时,设a=1,否则a=0 - 如果
length([=15=])!=3
,保持a
以前的状态。
$ awk -v s=UAE '[=10=]==s||p{p=(length([=10=])==length(s)?[=10=]==s:p)}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD
解释:
$ awk -v s=UAE ' # pass the string as variable
[=11=]==s||p { # enable p rinting if s tring matches
p=(length([=11=])==length(s)?[=11=]==s:p) # non-matching samelength string disables p
}
p' file
编辑: awk 中的另一个:
$ awk -v s=UAE '[=12=]==s||length([=12=])==length(s)&&[=12=]!=s&&p{p=[=12=]==s}p' file
UAE
44444444444444444444444444
55555555555555555555555555
77777777777777777777777777
66666666666666666666666666
88888888888888888888888888
UAE
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD