如何在 awk 中使用 substr?

how to use substr in awk?

我有这样的字符串

/foo/bar
/foo/bar/1
/foo/bar/baz
/foo/bar/baz/1

我希望仅当它是数字时才能够截断结尾。 例如,/foo/bar 保持不变,但 /foo/bar/1 变为 /foo/bar

如何在 awk 中执行此操作?

我猜你的数字在你的表达的末尾。 在这种情况下,下面的代码将起作用,否则请告诉我。

echo "/foo/bar/1" | awk -F"[0-9]+" '{print ;}'

上面的代码将打印:/foo/bar/

这么多方法,但是

sub(/\/[0-9]+$/, "");

可能是最简单的。

使用awk,你可以试试:

awk '{sub(/\/[0-9]+$/,"");print}' filename

您的输入输出为:

/foo/bar
/foo/bar
/foo/bar/baz
/foo/bar/baz

如果你想在 awk 中使用 substr 函数:

awk '{line=substr([=12=],1,index([=12=],/[0-9]/)-2); if(length(line)==0)line=[=12=]; print line}' filename

使用sed,你可以这样做:

while read line; do echo $line | sed 's/\/[0-9]\+$//'; done < filename