我编写了以下 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)
备注:行内容可以是任何内容,不受字符串/字数限制
如果您设置$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)
我认为在 awk 中没有办法只能手动删除第一个字段。(如果您愿意标准化场间空间,还有其他方法。)
awk '$2 == word {match($0, "("FS")+"); print substr($0, RSTART+RLENGTH);}'
Run Code Online (Sandbox Code Playgroud)