我需要用它的长度grep '.\{80\}' -B 1 file
来一行,但前提是它不包含特殊的字符>
。
我的文件看起来像
>asdf1
xxxxx
>asdf2
xxxxxxxxxxxxxx
并且应该在xxxx
长度上决定,如果上面的行+上面的那个通过过滤器。带有'>'的行应该简单地忽略计算。
预期输出应该是一个文件,其中包含超过20的上线和xxxxx线。
答案 0 :(得分:1)
检查此测试。似乎是你在寻找:
$ echo "$f1"
>asdf
xxxxxxxxxx
>asdf
xxxxxxxxxxxxxx
>bcde
xxxxx
>ghtr
xxxx
>qwer
xxxxxx
$ grep '^[^>].\{4\}$' -B1 <(echo "$f1") #exactly 5 chars
>bcde
xxxxx
$ grep '^[^>].\{8,\}$' -B1 <(echo "$f1") #9 chars and longer
>asdf
xxxxxxxxxx
>asdf
xxxxxxxxxxxxxx
所以在你的情况下,根据你的评论,这将为你带来正好20个字符的行:
$ grep '^[^>].\{19\}$' -B1 file
或者超过20岁:
$ grep '^[^>].\{19,\}$' -B1 file
答案 1 :(得分:1)
目前还不清楚你究竟要求的是什么,或许还有一些简单的事情:
awk '/^>/ {a=$0;next} length($0) > 20{print a RS $0}' input