我将4行的组转换为单行,然后按第2列对它们进行排序。以下适用于管道,但当我将其转换为2行bash脚本时,第二行不会计算。它与管道一样好,但是如果有人能指出我的bash脚本出错了会有用,以备将来参考。
命令行(工作正常):
cat test.txt | awk '{ printf("%s",$0); n++; if(n%4==0) { printf("\n");} else { printf("\t");} }' | sort -t $'\t' -k2,2 > testout.txt
bash脚本(awk似乎运行但不排序):
#!/bin/bash
awk '{ printf("%s",$0); n++; if(n%4==0) { printf("\n");} else { printf("\t");} }'
sort -t $'\t' -k2,2
输入test.txt:
@1:1:9834:8392:Y
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT
+1:1:9834:8392:Y
IIHIIIIGGGIIIIDDDIIIIFFFHIGEFEFEFEFE
@1:1:1323:1032:Y
AGCAGCATTGTACAGGGCTATCATGGAATTCTCGGG
+1:1:1323:1032:Y
HHHBHHBHBHGBGGGH8HHHGGGGFHBHHHHBHHHH
@1:1:1610:1033:Y
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1:1:1610:1033:Y
HHEHHHHHHHHHHHBGGD>GGD@G8GGGGDHBHH4C
@1:1:1679:1032:Y
CGGTGGATCACTCGGCTCGTGCGTCGATGAAGAACG
+1:1:1679:1032:Y
IIIHIIGIIIIIIIDIIIFHEIEDGFEFGECEEEGB
输出testout.txt(所需输出):
@1:1:1610:1033:Y AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +1:1:1610:1033:Y HHEHHHHHHHHHHHBGGD>GGD@G8GGGGDHBHH4C
@1:1:9834:8392:Y AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT +1:1:9834:8392:Y IIHIIIIGGGIIIIDDDIIIIFFFHIGEFEFEFEFE
@1:1:1323:1032:Y AGCAGCATTGTACAGGGCTATCATGGAATTCTCGGG +1:1:1323:1032:Y HHHBHHBHBHGBGGGH8HHHGGGGFHBHHHHBHHHH
@1:1:1679:1032:Y CGGTGGATCACTCGGCTCGTGCGTCGATGAAGAACG +1:1:1679:1032:Y IIIHIIGIIIIIIIDIIIFHEIEDGFEFGECEEEGB
bash脚本用法:
cat test.txt | ./duplicates_1000.sh > testout.txt
bash脚本的输出(awk已执行但未排序):
@1:1:9834:8392:Y AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT +1:1:9834:8392:Y IIHIIIIGGGIIIIDDDIIIIFFFHIGEFEFEFEFE
@1:1:1323:1032:Y AGCAGCATTGTACAGGGCTATCATGGAATTCTCGGG +1:1:1323:1032:Y HHHBHHBHBHGBGGGH8HHHGGGGFHBHHHHBHHHH
@1:1:1610:1033:Y AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +1:1:1610:1033:Y HHEHHHHHHHHHHHBGGD>GGD@G8GGGGDHBHH4C
@1:1:1679:1032:Y CGGTGGATCACTCGGCTCGTGCGTCGATGAAGAACG +1:1:1679:1032:Y IIIHIIGIIIIIIIDIIIFHEIEDGFEFGECEEEGB
提前谢谢。
答案 0 :(得分:2)
您必须将awk
的输出管道传输到sort
#!/bin/bash
awk '{ printf("%s",$0); n++; if(n%4==0) { printf("\n");} else { printf("\t");} }' | sort -t $'\t' -k2,2
或者他们按顺序运行,awk
会吃掉所有输入,而sort
只剩下任何内容