Sed 在同一文本文件中按不同块的顺序连接行
我将一个文件拆分为如下所示的块:Sed 在同一文本文件中按不同块的顺序连接行,sed,awk,Sed,Awk,我将一个文件拆分为如下所示的块: AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTGGGG AGGTAGTTATTATTTTTTTGGTTTTTAGTATTTAATTGAGTGTTT ATGTAGGTGTTTATGTATTAGTTTTTTTTAGGTTTAGGGTGTTGT ATTTAGGTTTTGTGTTTTGTGTATTATTGAATTTAATTAAAGTTA AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTT AG
AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTGGGG
AGGTAGTTATTATTTTTTTGGTTTTTAGTATTTAATTGAGTGTTT
ATGTAGGTGTTTATGTATTAGTTTTTTTTAGGTTTAGGGTGTTGT
ATTTAGGTTTTGTGTTTTGTGTATTATTGAATTTAATTAAAGTTA
AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTT
AGTTTTTTTTTATTTGTCGGGATATTTTAGTTGATTTTAGATTGC
TATATTTTTAGTTTCGATTCGTCGTAAGTTTTATTTTTTTTTAAT
GGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTTT
为了清晰起见,我已经截断/包装了这些行,但请想象一下非常长的行。我的问题是,我想要一个最终文件,看起来像这样:
AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTGGGGAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTT
AGGTAGTTATTATTTTTTTGGTTTTTAGTATTTAATTGAGTGTTTAGTTTTTTTTTATTTGTCGGGATATTTTAGTTGATTTTAGATTGC
ATGTAGGTGTTTATGTATTAGTTTTTTTTAGGTTTAGGGTGTTGTTATATTTTTAGTTTCGATTCGTCGTAAGTTTTATTTTTTTTTAAT
ATTTAGGTTTTGTGTTTTGTGTATTATTGAATTTAATTAAAGTTAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTTT
其中,该新区块具有:
sed
和/或awk
实现此最终块,您能告诉我如何实现吗?尝试以下方法:
awk -vOFS="" '$0{a[NR]=$0}END{for(i=1;i<=NR/2;i++)print a[i],a[i+5]}' file
awk-vOFS=”“'$0{a[NR]=$0}END{for(i=1;i在bash
中使用粘贴:
$ paste <(head -4 file) <(tail -4 file) | tr -d '\t'
AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTGGGGAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTT
AGGTAGTTATTATTTTTTTGGTTTTTAGTATTTAATTGAGTGTTTAGTTTTTTTTTATTTGTCGGGATATTTTAGTTGATTTTAGATTGC
ATGTAGGTGTTTATGTATTAGTTTTTTTTAGGTTTAGGGTGTTGTTATATTTTTAGTTTCGATTCGTCGTAAGTTTTATTTTTTTTTAAT
ATTTAGGTTTTGTGTTTTGTGTATTATTGAATTTAATTAAAGTTAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTTT
$pasteawk-F'\n'-v RS='{for(i=1;我只是想知道它是否可以用sed/awk来完成,或者它是如何完成的?对不起,我更改了if for how.:(如果文件超过4行怎么办?(他没有说可以,但是为了完整起见,可以使用wc-l
甚至cat
)@Oerd我想你的意思是,如果每个块有4行以上的话……如果是这样的话,很明显要将head
和tail
读取的行数增加到块中的行数。是的,这就是我的意思。可能是为了他的命令行foo级别而考虑过这一行了
$ paste <(head -4 file) <(tail -4 file) | tr -d '\t'
AGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTGGGGAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTT
AGGTAGTTATTATTTTTTTGGTTTTTAGTATTTAATTGAGTGTTTAGTTTTTTTTTATTTGTCGGGATATTTTAGTTGATTTTAGATTGC
ATGTAGGTGTTTATGTATTAGTTTTTTTTAGGTTTAGGGTGTTGTTATATTTTTAGTTTCGATTCGTCGTAAGTTTTATTTTTTTTTAAT
ATTTAGGTTTTGTGTTTTGTGTATTATTGAATTTAATTAAAGTTAGGATAGGTTTTGGTGTTTGAGGTTAATTTTGTTTTATTTTTTTTT
awk -F'\n' -v RS= '{for (i=1;i<=NF;i++) {str[i] = str[i] $i} END {for (i=1;i<=NF;i++) print str[i]}' file