【问题标题】:How to print three consecutive lines after a pattern, which is in different file如何在不同文件中的模式后打印三个连续行
【发布时间】:2017-06-30 01:15:39
【问题描述】:

我是初学者,希望有人可以帮助我。我想使用 awk(或 sed)来完成这项任务。

我有两个文件,

文件 1

@HWI-M01162:73:000000000-A7TPE:1:1101:17896:1432
@HWI-M01162:73:000000000-A7TPE:1:1101:14465:1433

文件 2

@HWI-M01162:73:000000000-A7TPE:1:1101:17896:1432 1:N:0:CTTGTA
CCCCAATGTGATCTGTTTACATTCCAACTCAGCTTCCTCTTGTAAATGTTTTTCTTTTTAC
+
8ABC-6F,C<,CFF9FGGAE9FGFF9<EFF9,CEEEEGGGG9E,,,C<FFFGGGGGGGGGG
@HWI-M01162:73:000000000-A7TPE:1:1101:14465:1433 1:N:0:CTTGTA
CCCATGATGGTACGAAAGTACACATTTTATTTCTTATAAGCAATGGGTTTACTCAGCCTGA
+
@CC<CA9F<<FCFE>87@FCFAF?FFGG9FFFFGGCF9,<EA8FC8EFFGEFGG98@FFC8
@HWI-M01162:73:000000000-A7TPE:1:1101:15447:1444 1:N:0:CTTGTA
CTCTATCTAGAGTTGCCTTCATCAGTTTATCAAAAACACAACCTTAAAAAGGCAACCCCTG
+
AACC@FFGA<@9FF9EEFGF9FF9<FFFEFF99,,<B8C<8@FFGD,,,,,:C8<FEFEF8
@HWI-M01162:73:000000000-A7TPE:1:1101:15876:1444 1:N:0:CTTGTA
CTCTTTATTTAGTTTTAACTTATCTCAAAAATTACTCGACCTAAAAAATTTGGCCTGTTTA
+
-8CCCG-EFFA9FFFG98FFF9FEEE9,,,,CFAEFF7,@CF,,,,,+CEF9,CFF8EFF,

我想要的输出如下。因此,如果文件 1 中的行与文件 2 中的行匹配,则将文件 2 中的行与三个连续的行一起打印。文件 1 中的行都是唯一 ID。

@HWI-M01162:73:000000000-A7TPE:1:1101:17896:1432 1:N:0:CTTGTA
CCCCAATGTGATCTGTTTACATTCCAACTCAGCTTCCTCTTGTAAATGTTTTTCTTTTTAC
+
8ABC-6F,C<,CFF9FGGAE9FGFF9<EFF9,CEEEEGGGG9E,,,C<FFFGGGGGGGGGG
@HWI-M01162:73:000000000-A7TPE:1:1101:14465:1433 1:N:0:CTTGTA
CCCATGATGGTACGAAAGTACACATTTTATTTCTTATAAGCAATGGGTTTACTCAGCCTGA
+
@CC<CA9F<<FCFE>87@FCFAF?FFGG9FFFFGGCF9,<EA8FC8EFFGEFGG98@FFC8

【问题讨论】:

    标签: awk sed


    【解决方案1】:
    $ awk 'NR==FNR{a[$0];next} $1 in a{c=4} c&&c--' file1 file2
    @HWI-M01162:73:000000000-A7TPE:1:1101:17896:1432 1:N:0:CTTGTA
    CCCCAATGTGATCTGTTTACATTCCAACTCAGCTTCCTCTTGTAAATGTTTTTCTTTTTAC
    +
    8ABC-6F,C<,CFF9FGGAE9FGFF9<EFF9,CEEEEGGGG9E,,,C<FFFGGGGGGGGGG
    @HWI-M01162:73:000000000-A7TPE:1:1101:14465:1433 1:N:0:CTTGTA
    CCCATGATGGTACGAAAGTACACATTTTATTTCTTATAAGCAATGGGTTTACTCAGCCTGA
    +
    @CC<CA9F<<FCFE>87@FCFAF?FFGG9FFFFGGCF9,<EA8FC8EFFGEFGG98@FFC8
    

    【讨论】:

    【解决方案2】:

    这个 awk 会这样做:

    awk 'FNR==NR{k[FNR]=$0; next} 
         {data[FNR]=$0; next}
         END{
           for (i=1;i in k;i++) {
               for (j=1; j in data; j++){
                    if (data[j]~k[i]){
                       for (x=0; x<4; x++)
                           print data[j+x]
                       j+=x
                    }
               }
            }
          }' f1 f2
    

    【讨论】:

    • 嗨,Dawg,非常感谢!它适用于我的文件!
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多