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

如何用Unix单行命令将首字段移至可变长度后续字段末尾?

调整文件字段顺序的Unix单行命令

原文件格式:

id1 str1 str2 .. strn
id2 str1 str2 .. strm

每行首字段为ID,后续字符串数量不固定,需要转换为以下格式:

str1 str2 .. strn [id]
str1 str2 .. strm [id]

awk实现方案

下面提供几种实用的awk写法,解决提取首字段后所有内容的问题:

  1. 用正则替换移除首字段
awk '{sub(/^[^ ]+ /, ""); print $0 " [" $1 "]"}' file

sub(/^[^ ]+ /, "")会匹配行首第一个字段(包含其后的空格)并替换为空,剩下的就是所有后续字段,直接拼接带括号的ID即可。

  1. 循环拼接后续字段
awk '{rest=""; for(i=2;i<=NF;i++) rest=rest $i " "; sub(/ $/, "", rest); print rest " [" $1 "]"}' file

通过循环从第2个字段开始拼接所有内容,最后用sub(/ $/, "", rest)移除拼接后末尾多余的空格,再添加ID部分。

  1. 重定义字段后截取内容
awk '{id=$1; $1=""; print substr($0,2) " [" id "]"}' file

先把首字段存到变量id中,将$1设为空后,$0会自动变成从第2个字段开始的内容(但开头会多一个空格),用substr($0,2)去掉开头的空格,再拼接ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:55:14