假设我有"a b user.group@server c /dir/foo/bar/last2/notneeded"
使用awk,我该怎么打印出来:
"a b user c server group /dir/foo/bar"
我需要重新排列某些内容的顺序,还是为每个子字段使用不同的分隔符,而不是在目录结构中包含最后两条路径信息?
我的想法是在我的awk
电话的输出上拨打awk
,但这种情况很糟糕。
为清晰起见编辑:
大多数数据是空格分隔的,但其中2个字段具有自己的字段。我希望能够将user.group@server
分成3个单独的字段,并将/dir/foo/bar/last2/notneeded
中的最后2个路径截断为/dir/foo/bar
答案 0 :(得分:2)
您不需要在user.group@server
中拆分字段,因为有两种类型的分隔符有三个字段。相反,您可以使用match
和substr
。
如果您将以下内容放入a.awk
{
sub(/\/[^/]*\/[^/]*$/, "", $NF)
match($3, /.*\./)
user = substr($3, RSTART, RLENGTH - 1)
match($3, /\..*@/)
group = substr($3, RSTART + 1, RLENGTH - 2)
server = substr($3, index($3, "@") + 1)
print $1, $2, user, $4, server, group, $NF
}
并运行
awk -f a.awk foo.txt
你会得到
a b user c server group /dir/foo/bar
答案 1 :(得分:2)
您也可以定义多个分隔符
awk -F"[ .@]" '{print $1, $2, $3, $6, $5, $4, $7}'
将返回
a b user c server group /dir/foo/bar/last2/notneeded
对于最后一个字段,您可以通过bkmoney进行替换。
awk -F"[ .@]" '{sub(/\/[^/]*\/[^/]*$/, "", $7);print $1, $2, $3, $6, $5, $4, $7}'
返回
a b user c server group /dir/foo/bar