Linux批量给dat_comp文件加表头时遇重定向歧义错误求助
解决批量为文件添加表头时的重定向错误
错误原因
你执行的命令存在两个核心问题:
- 重定向目标不明确:
> Comp_dat{1..100}.txt会被bash展开为100个文件名,但标准输出重定向>只能指向单个文件,bash无法确定输出要写入哪个文件,因此抛出ambiguous redirect错误。 - 输入文件合并错误:
cat - dat_comp{1..100}.txt会把所有100个输入文件的内容和表头拼接成一大段输出,就算重定向正常,最终也会把所有内容写入同一个文件,无法实现“每个原文件对应一个带表头的新文件”的需求。
正确解决方案
使用for循环逐个处理每个文件,确保每个原文件对应生成一个带表头的新文件:
写法一:分步写入表头和内容
for i in {1..100}; do # 先写入表头到新文件 echo -e "ID\tBMI\tGeno" > "Comp_dat${i}.txt" # 再把原文件内容追加到新文件 cat "dat_comp${i}.txt" >> "Comp_dat${i}.txt" done
写法二:用进程替换合并表头和内容
for i in {1..100}; do # 通过进程替换将表头作为cat的输入之一,直接合并输出到新文件 cat <(echo -e "ID\tBMI\tGeno") "dat_comp${i}.txt" > "Comp_dat${i}.txt" done
这两种写法都会遍历1到100的数字,对每个dat_compX.txt文件,生成对应的Comp_datX.txt文件,且新文件开头包含指定表头。
内容的提问来源于stack exchange,提问作者monif064
相关产品推荐
相关产品推荐

