Linux Bash-根据条件筛选行
我有一个包含以下行的文件:Linux Bash-根据条件筛选行,linux,bash,awk,wc,Linux,Bash,Awk,Wc,我有一个包含以下行的文件: @SRR4293695.199563512 199563512 CAAAANCATTCGTAGACGACCTGCTCTGTNGNTACCNTCAANAGATCNGAAGAGCACACGTCTGAACTCCAGTCAC +SRR4293695.199563512 199563512 A.AA<#FF)FFFFFFF<<<<FF7FFFFFF#.#<FF<#FFFF#FF<A<#FFFFFFFAFFFFFFAAAF
@SRR4293695.199563512 199563512
CAAAANCATTCGTAGACGACCTGCTCTGTNGNTACCNTCAANAGATCNGAAGAGCACACGTCTGAACTCCAGTCAC
+SRR4293695.199563512 199563512
A.AA<#FF)FFFFFFF<<<<FF7FFFFFF#.#<FF<#FFFF#FF<A<#FFFFFFFAFFFFFFAAAFFFFF<FFFF.
@SRR4293695.199563513 199563513
CTAAANCATTCGTAGACGACCTGCTT
+SRR4293695.199563513 199563513
<AAAA#FFFFFF<FFFFFFFFFFFFF
@SRR4293695.199563514 199563514
CCAACNTCATAGAGGGACAAGTGGCGATCNGNC
+SRR4293695.199563514 199563514
AAAAA#<F.F<<FA.F7AA.)<FAFA..7#.#A
@SRR4293695.199563515 199563515
TCGCGNCCTCAGATCAGACGTGGCGA
+SRR4293695.199563515 199563515
AAAAA#FFFFFF<FFFFFFFFFFFFF
@SRR4293695.199563516 199563516
TGACCNGGGTCCGGTGCGGAGAGCCCTTC
+SRR4293695.199563516 199563516
AAAAA#FAFFFF<F.FFAA.F)FFFFFAF
@SRR4293695.199563517 199563517
AAATGNTCATCGACACTTCGAACGCACT
+SRR4293695.199563517 199563517
AA)AA#F<FFFFFFAFFFFF<)FFFAFF
@SRR4293695.199563518 199563518
TCGTANCCAATGAGGTCTATCCGAGGCGCN
+SRR4293695.199563518 199563518
AAAAA#<FAAFFFF.FFFFFFFA.FFFFF#
@SRR4293695.199563519 199563519
AAAACNATTCGTAGACGNCCTGCTTNTGTNGNCACCNTNANNANNTCNGNAGAGCNCACNTCTGAACTCNAGTCAC
+SRR4293695.199563519 199563519
AAAAA#FFFFFFFFFFF#FFFFFFF#FF<#F#F.FF#7#F##F##A)#A#FF<F)#AAF#<FFFFAFF<#<FFFFF
@SRR4293695.199563520 199563520
GAAGCNGCACAGCTGGCNTTGGAGCNGANNCNGTAGNCNCNNTNNATNGNTCGGNNGAGNACACGTCTGNACTCCA
+SRR4293695.199563520 199563520
AAAAA#FFFFFFFFFFF#FFFFFFF#FF##A#FFFF#F#F##<##FF#F#FFFF##FFF#FFFFFFFFF#FFFFFF
@SRR4293695.199563521 199563521
TGGTCNGTGGGGAGTCGNCGCCTGCNTANNANTGTANGNANNANNAANANATCGNNAGANCACACGTCTNAACTCC
+SRR4293695.199563521 199563521
AAAAA#FFFFFFFFFFF#FFFFFFF#FF##F#FFFF#F#F##A##FF#A#FFFF##<FF#FFFFFFFFF#F<FFFF
@SRR4293695.199563522 199563522
TCGTANCCAATGAGGTCTATCCGAGGCGCN
+SRR4293695.199563522 199563522
AAAAA#<FAAFFFF.FFFFFFFA.FFFFF#
@SRR4293695.199563512 199563512
CAAAANCATTCGTAGACCTGCTCTGTNGTACCNTCAANAGATCNGAAGAGCACGTCGACTGACTCCAGTCAC
+SRR4293695.199563512 199563512
A.AAsed
方法:
sed -n 'h;n;/.\{34,\}/!{x;G;p}' inputfile > outputfile
h;n
奇数行进入h
旧缓冲区,然后获取n
ext行
将检查生成的偶数行的长度。如果它们不超过34个字符,则保持缓冲区是ex
,随模式空间变化,然后附加到它上(x;G;
),这样两行都在模式空间中,并且p
打印
sed
方法:
sed -n 'h;n;/.\{34,\}/!{x;G;p}' inputfile > outputfile
h;n
奇数行进入h
旧缓冲区,然后获取n
ext行
将检查生成的偶数行的长度。如果它们不超过34个字符,则保持缓冲区是ex
,随模式空间变化,然后附加到它上(x;G;
),这样两行都在模式空间中,并且p
打印
以下是一个awk解决方案:
awk '!last { last = $0; next } length($0)<=34 { print last; print } { last = "" }' YOURFILE
awk'!last{last=$0;next}length($0)这里有一个awk解决方案:
awk '!last { last = $0; next } length($0)<=34 { print last; print } { last = "" }' YOURFILE
awk'!last{last=$0;next}length($0)您的代码在哪里?…somecommand…>>$outputFile
一次又一次地重复是非常低效的——当您将其分别放在每一行上时,您的脚本每次要追加一行时都会重新打开该文件。相反,您应该只打开一次输出文件(例如,脚本顶部的“exec>”$outputFile“
将截断该文件,并使脚本中所有未来的stdout重定向到该文件)。也就是说,如果您真的想要吞吐量,最好编写awk脚本而不是bash(或者,如果您真正关心性能,请使用Go或Julia等语言,并将其牢记在心)。谢谢你指出@CharlesDuffy。是的,我想写一个awk脚本。问题是我还不是专家。你的代码在哪里?…somecommand…>>$outputFile
一次又一次的效率很低——当你把它分别放在每一行上时,你的脚本每次想附加一个单独的代码时都会重新打开文件相反,您应该只打开一次输出文件(例如,脚本顶部的“exec>”$outputFile“
将截断该文件,并使脚本中所有未来的stdout重定向到该文件)。也就是说,如果您真的想要吞吐量,最好编写一个awk脚本而不是bash(或者,如果您真正关心性能,请使用Go或Julia等语言,并将其牢记在心)。谢谢你指出@CharlesDuffy。是的,我想写一个awk脚本。问题是我还不是专家。非常感谢!这正是我要找的!非常感谢!这正是我要找的!