awk + ​​打印除 $1 之外的所有行内容

jen*_*fer 6 awk

我编写了以下 awk 脚本:

% echo /var/sysconfig/network/my_functions  alpha beta gama  | \
      awk -v word=alpha '$2  == word { print $0 }'
Run Code Online (Sandbox Code Playgroud)

如何告诉 awk 我想打印除 $1 (/var/sysconfig/network/my_functions PATH ) 之外的所有行,这样我会得到以下信息:

alpha beta gama
Run Code Online (Sandbox Code Playgroud)

代替

/var/sysconfig/network/my_functions alpha beta gama
Run Code Online (Sandbox Code Playgroud)

备注:行内容可以是任何内容,不受字符串/字数限制

Den*_*son 6

如果您设置$1""您将离开分隔空间。如果您不想这样做,则必须遍历字段:

awk '{for (f=2; f<=NF; ++f) { if (f!=2) {printf("%s",OFS);} printf("%s",$f)}; printf "\n" }'
Run Code Online (Sandbox Code Playgroud)

编辑:根据吉尔斯的评论修复。

做同样事情的另一种方法:

awk '{d = ""; for (f=2; f<=NF; ++f) {printf("%s%s", d, $f); d = OFS}; printf("\n") }'
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 1

我认为在 awk 中没有办法只能手动删除第一个字段。(如果您愿意标准化场间空间,还有其他方法。)

awk '$2 == word {match($0, "("FS")+"); print substr($0, RSTART+RLENGTH);}'
Run Code Online (Sandbox Code Playgroud)