You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash处理管道输出行数多于输入的问题排查

问题根源

你的脚本里,grep -F "${i//\.\//public://}" file_managed.dump.txt这一步可能匹配到了多行结果。当把grep的结果赋值给fid变量时,变量内部会包含换行符。后续执行echo -n "${fid:-$i}"时,这些换行符会被直接输出,导致原本对应输入一行的输出被拆成多行,最终输出文件行数远超输入。

修复方案

给grep加上-m 1参数,强制只返回第一匹配行,确保fid变量只有一行内容:

while IFS=$'\t' read -r -a a
  do for i in "${a[@]}"
    do 
      fid=$(grep -m1 -F "${i//\.\//public://}" file_managed.dump.txt|cut -d'(' -f2 |cut -d, -f1| sed 's/[^0-9]//g')
      echo -n "${fid:-$i}" $'\t'
    done
    echo
  done < dupes.log  > fids_dupes.txt

如果需要保留所有匹配的fid但不想拆分行,可以把多行结果用空格替换换行:

fid=$(grep -F "${i//\.\//public://}" file_managed.dump.txt|cut -d'(' -f2 |cut -d, -f1| sed 's/[^0-9]//g' | tr '\n' ' ')
验证方法

找一条可能产生多行匹配的路径,单独执行测试:

grep -F "替换后的目标路径" file_managed.dump.txt

查看输出是否为多行,就能直接确认问题所在。

内容的提问来源于stack exchange,提问作者chx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:42:45