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

如何用awk打印第2列及从第3列到行尾的含空格内容

问题描述

现有文件fileA.txt内容如下:

Toyota 2017 Corola Good condition
Honda 2013 Civic Flat back right tire
Jeep 2017 Wrangler Roof is leaking and oil needs change

期望输出第2列及之后的所有内容:

2017 Corola Good condition
2013 Civic Flat back right tire
2017 Wrangler Roof is leaking and oil needs change

使用命令awk '{print $2,$NF}' fileA.txt只能得到第2列和最后一个单词:

2017 condition
2013 tire
2017 change 

原因是awk默认以空格为列分隔符,$NF仅代表最后一列(单个单词),需实现期望的输出效果。

解决方案

以下是几种实用的awk实现方式:

方法1:循环遍历输出目标字段

通过for循环从第2列遍历到最后一列,逐个输出字段:

awk '{for(i=2;i<=NF;i++) printf "%s ", $i; print ""}' fileA.txt

注:每行末尾会多一个空格,若想避免,可调整为判断最后一个字段时不加空格,写法稍复杂但更严谨。

方法2:正则替换移除首列

用正则匹配行首的第一个字段(含后续空格),将其替换为空:

awk '{sub(/^[^ ]+ /, ""); print}' fileA.txt

解释:^[^ ]+ 匹配行首非空格字符组成的首字段,加上后续的空格,sub函数将这段内容替换为空,剩余部分即为目标输出。

方法3:清空首列后处理输出

将首列设为空,再移除开头多余的空格:

awk '$1=""; print substr($0,2)' fileA.txt

解释:把$1赋值为空后,整行内容开头会多出两个空格,用substr($0,2)截取从第2个字符开始的内容,即可得到正确格式。

方法4:GNU awk专属拼接函数(兼容性有限)

如果使用GNU awk,可直接用join函数拼接目标字段:

awk '{print join($0, 2, NF, " ")}' fileA.txt

解释:join函数将第2到第NF的字段用空格拼接后输出,仅支持GNU awk环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:27:20