【发布时间】:2018-08-08 20:01:01
【问题描述】:
我有一个文件,想用 grep 排除一个模式。但我也想删除每场比赛的前两行(排除在外)。我该怎么做?
我尝试过的:
cat file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
176 184 + pattern:AA[CT]NNN[AT]CN . aatcctaca
# With grep -v I can remove the line with pattern
grep -v "[acgt]\{3\}cc[acgt][acgt]\{3\}" file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
# But using -B 2 does not work here
grep -B 2 -v "[acgt]\{3\}cc[acgt][acgt]\{3\}" file.txt
Sequence: MG719312_IGHV1-8*03_Homosapiens_F_V-REGION_127..422_296nt_1_____296+0=296___ from: 1 to: 296
Start End Strand Pattern Mismatch Sequence
217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc
Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301
Start End Strand Pattern Mismatch Sequence
任何想法如何删除每场比赛的前两行?
【问题讨论】:
-
How do I delete a matching line and the previous one? 的可能重复项 - 问题有
-B 1而不是-B 2,但答案将直接适用。 -
示例文件有一个清晰的记录结构,我会警惕尝试使用面向行的命令行工具,如
grep和sed,一起破解一些东西。看着它,我很想编写一个 Perl 脚本来解析序列记录并匹配它们。 -
@tripleee,感谢您指导我找到可能的副本。那里的最佳答案适用于前一行,但不适用于 2。
-
@b.nota 如果您指的是
sed答案,请尝试将“1d”替换为“2d”。 -
2d 不正确:
sed -n '/[acgt]\{3\}cc[acgt][acgt]\{3\}/{n;x;d;};x;2d;p;${x;p;}' file.txt Start End Strand Pattern Mismatch Sequence 217 225 + pattern:AA[CT]NNN[AT]CN . aacacctcc Sequence: M99648_IGHV2-26*01_Homosapiens_F_V-REGION_164..464_301nt_1_____301+0=301___ from: 1 to: 301