批量处理ENSG前缀文件时awk脚本无输出问题求助
批量去除文件双引号的问题解决
你的循环脚本没有输出的核心原因:awk命令未指定要处理的输入文件。原脚本里的awk一直在等待标准输入,根本没有读取目标文件$i,自然不会生成任何输出内容。
修正后的脚本如下:
#!/bin/bash #PBS -N Edit #PBS -l walltime=01:00:00 #PBS -l nodes=1:ppn=8 #PBS -l vmem=10gb #PBS -m bea for i in ENSG00000*; do # 给awk指定输入文件$i,同时给文件名加双引号避免空格等特殊字符问题 awk '{ gsub(/"/, ""); print }' "$i" > "$i.out" done
额外优化建议:
- 可以用更简洁的awk写法实现相同效果:
awk -F\" '{ $1=$1 } 1' "$i" > "$i.out",原理是把双引号设为字段分隔符,重新拼接字段时会自动去除所有引号 - 如果担心误覆盖已存在的
.out文件,可添加判断逻辑:if [ ! -f "$i.out" ]; then awk '{ gsub(/"/, ""); print }' "$i" > "$i.out"; fi
内容的提问来源于stack exchange,提问作者HKJ3
相关产品推荐
相关产品推荐

