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

如何遍历文件一行中的每个单词并逐行输出?

问题与解决方法

问题说明

text.txt的内容如下:

absolute abstract academic accepted accident 

需要将该行中的每个单词逐个打印,期望输出:

absolute
abstract
academic
accepted
accident

尝试过两种方式但都有问题:

  1. 用cat+循环+cut,但因为cut的字段从1开始计数,循环从0开始导致遗漏单词,代码如下:
words="$(cat text.txt | wc -w)"

for ((i=0; i<$words; i++)); do
        cut -d' ' -f$i text.txt
done
  1. 尝试用awk但语法错误,输出混乱:
awk '{print $'$i'}'   

解决方法

方法1:修正原有循环逻辑

问题出在循环起始值,把循环从1开始,到单词总数结束即可:

words=$(wc -w < text.txt)
for ((i=1; i<=words; i++)); do
    cut -d' ' -f$i text.txt
done

这里把cat text.txt | wc -w优化为wc -w < text.txt,减少不必要的子进程调用。

方法2:用awk高效处理

awk默认以空白分割字段,NF代表当前行的字段总数,直接在awk内部遍历打印每个字段:

awk '{for(i=1;i<=NF;i++) print $i}' text.txt

一行命令就能完成,无需外部变量,处理效率更高。

方法3:更简洁的替代命令

如果只是要把空格分隔的单词换成每行一个,还有更简单的命令可选:

  • 用tr替换空格为换行(若有连续空格,加-s压缩避免空行):
tr -s ' ' '\n' < text.txt
  • 用xargs拆分后逐行输出:
xargs -n1 < text.txt

xargs会自动处理连续空白字符,直接输出每个单词单独一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:30:58