bash 排序错误 "sort: write failed: standard output: Broken pipe"

标签 bash sorting broken-pipe

<分区>

当我运行这个脚本时,我收到一条错误消息:“排序:写入失败:标准输出:破损的管道”

如果有人能帮助我,那就太棒了,我被这个错误弄疯了

输入文件是一个文件列表,所有文件都包含 FASTA 格式的 DNA 序列,因此每个文件都有几个序列(每个序列在一行中),格式为: 在 $1(标识符)中 在 $2,3,4,5,6,7&8(更多值)中 在 $9(DNA 序列)中

然后我想通过每个文件中的序列数($common_hits)选择每个序列(这个数字不是固定值,但我为示例设置了 6) - 必须删除所有少于 6 个序列的文件 -6个序列的文件都可以 -超过6个序列的文件必须减少到6个序列(这些序列由字段$5的较高值选择)

输出文件必须包含所有 6 个序列,并且序列(字段 $9)必须位于标识符之后的行中

我现在不会删除超过 6 个序列的原始文件,因为我想确保它有效

par_list=`ls -1 *BR`

common_hits="6"

for i in ${par_list}

do

   if [ "`cat ${i} | wc -l`" -lt "${common_hits}" ]
   then
      rm -f ${i}
   elif [ "`cat ${i} | wc -l`" -gt "${common_hits}" ]
   then
      cat ${i} | sort -nr -k 5 | head -n ${common_hits} | \
      awk '{print $1"    " $2"    " $3"    " $4"    " $5"    " $6"    " $7"           "$8 ; print $9}' > ${i}.ph 
   fi

done 

最佳答案

排序 | head 总是 报告错误,如果 headsort 写入所有输出(如如果 sort 写入的流比 head 消耗的流长得多,就会出现这种情况)。这是设计使然:如果 sort 无法写入其所有输出,则预计会失败;如果它忽略此类故障,它也会忽略由于其他原因(磁盘已满、网络连接断开等)无法写入输出的情况。

这没有什么不寻常或不受欢迎的。如果您不关心错误,请忽略它,并检查管道输出的行数以确定您是否遇到了错误情况。

关于bash 排序错误 "sort: write failed: standard output: Broken pipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46202653/

相关文章:

string - 如何从 Bash 变量中去除空格?

Debug模式下的 Django 断管

bash - Awk 和排序输出以逗号分隔?

python - 与 Bash/shell 相比,使用 Python 连接到 FTP 服务器有什么优势吗?

objective-c - NSDictionary 键按数值排序

c# - 在 C# 中对字符串数组进行排序

python - xinetd 服务调用 python 脚本(无法正确执行)

python - 如何使用 Flask/gunicorn 处理 Broken pipe 错误?

bash - 为单个语句设置 IFS

python - 使用超过 1 列对 Excel 数据进行排序