什么是用于在字段之间交换的 Unix oneliner?

klo*_*oop 6 awk one-liner

我有一个包含列表的文件

id1 str1 str2 .. strn
id2 str1 str2 .. strm
Run Code Online (Sandbox Code Playgroud)

(str的数量可以变化)并且我想要一个将其转换为的oneliner

str1 str2 .. strn [id]
str1 str2 .. strm [id]
Run Code Online (Sandbox Code Playgroud)

awk 应该有一种方法可以做到这一点,但我不知道当它们的长度可变时如何获取 $1 之后的“所有字段”。

我的想法是这样的

cat file | awk '{ print $2 and the rest " [" $1 "]" }'
Run Code Online (Sandbox Code Playgroud)

但只是缺少“2 美元和其余的”......

Jam*_*own 2

$ awk '{for(i=2;i<=NF;i++)printf "%s%s",$i,OFS (i==NF?"[" $1 "]" ORS:"")}' file
Run Code Online (Sandbox Code Playgroud)

输出:

str1 str2 .. strn [id1]
str1 str2 .. strm [id2]
Run Code Online (Sandbox Code Playgroud)