如何在 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
我有这样的字符串
/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