我将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

提前谢谢你。

最佳答案

必须通过管道将awk的输出传送到sort

#!/bin/bash
awk '{ printf("%s",$0); n++; if(n%4==0) { printf("\n");} else { printf("\t");} }' | sort -t $'\t' -k2,2

或者它们按顺序运行,awk会吃掉所有的输入,而没有剩余的输入

关于linux - 管道有效,但bash脚本不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34506285/

10-09 00:56