Shell循环输出优化:如何将ID与grep统计结果置于同一行?
解决Shell循环中ID与统计结果同行输出的问题
我来帮你调整这个循环逻辑,让ID和对应的grep统计结果输出在同一行~
修改后的命令(两种可选方式)
方式1:使用echo拼接输出
while read line; do echo "$line $(grep -c "0/1/0" file_$line.hwe)" >> Ho done < my_file
方式2:使用printf格式化输出(更严谨可控)
while read line; do count=$(grep -c "0/1/0" file_$line.hwe) printf "%s %d\n" "$line" "$count" >> Ho done < my_file
为什么原来的命令会分行?
你原来的命令里,echo $line >> Ho和grep -c ... >> Ho是两个独立的输出操作,每个操作都会单独输出一行内容,所以ID和统计结果被拆分成了两行。
修改后的逻辑是通过命令替换($(...))把grep的统计结果嵌入到同一行的输出中,让ID和数字在同一个输出命令里完成打印,自然就会保持在同一行。
额外注意点
- 给变量
$line加上双引号("$line"),能避免ID中包含空格、特殊字符时出现意外错误; - 方式2先把统计结果存入变量
count再输出,可读性更强,也方便后续对统计数字做额外处理时复用。
内容的提问来源于stack exchange,提问作者user236152
相关产品推荐
相关产品推荐

