我在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

#1楼 票数:1 已采纳

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

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

简要说明,

  • 使用标志a确定是否打印记录
  • length($0)==3 ,仅当$0=="UAE" ,设置a = 1,否则a = 0
  • 如果length($0)!=3 ,保持什么样a曾经是。

#2楼 票数: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

  ask by Navneet Gautam translate from so

未解决问题?本站智能推荐:

1回复

在外壳中的前一行添加前缀

我正在执行以下命令来获取必须从其上方的行添加前缀的行,如下所示: 而且我得到的东西如下: 如何在以E [字母数字]开头的行中添加前缀,以使文件变为
1回复

grep只有至少有两个相同音节的单词

是否可以使用grep? 我想要像“hahaha”或“cocoa”或“19931992”这样的grep字样。 我有这样的事情: 但它不起作用
6回复

C#如何grep目录路径中的最后一个单词?

我有一个程序可以从日志文本文件中“抓取”出各种目录路径,并根据单词显示各种结果。 目录路径的示例: C:/文档和设置/所有用户/桌面/ AccessData FTK Imager.lnk C:/文档和设置/所有用户/开始菜单/程序/ AccessData C:/ Docum
1回复

如何grep-w可能会或可能不会出现在同一行中的2个单词?

我需要两个命令的组合,有没有办法只grep一次? 因为文件可能很大,> 1gb 我不需要像grep那样在同一行上存在2个单词 。 我只需要避免整个文件的冗余迭代
3回复

如何使用grep计数txt文件中五个字母单词的数量?

我不太擅长linux,并且正在尝试使用grep计数五个字母单词。
2回复

如何grep或egrep单词连续出现两次?

嗨,我想知道如何grep重复出现两次单词的行。 很明显,必须考虑到两个词之间的空格,并且必须区分大小写,我相信grep自然是这样。 我不仅想要一个答案,而且我想知道如何去做和理解它。 因此,任何响应的人都可以请您解释生产线在说什么或模式在做什么。 我对grep和bash有基本的中级掌握
1回复

如何在彼此之后在线上grep2个相同的字符串

我想找出文本中是否有相似的行,并且彼此相邻。 例如,我想找到在eacother中和之后是否有任何行有“cccc”的行。 因此,我应该只打印cccc ****双行。 我尝试过类似的东西: 但得到了所有“cccc *”行。 我知道的简单问题...另一个示例:搜索“芬兰”的重复项:
6回复

在UNIX中,如何在长字符串中找到单个单词?

假设我有以下字符串: 现在我知道在它之后有一个数字,但是我希望从这个字符串中schwifty所有其他内容。 grep -o似乎不起作用,甚至出于某种原因甚至是一个可用的选项...任何想法?