Awk: 获取几个字段并使用定界符将它们连接为一个字符串

3
我想知道是否有可能在使用 awk 时不仅检索到孤立的字段,还可以检索包含多个相邻字段和封闭分隔符的原始字符串的部分内容?
例如,在使用 awk 时,当检索以下内容时:
foo.bar.baz.test

使用'.'作为分隔符,让awk提取第2和第3个字段,我希望能获取到以下内容:

bar.baz

自动化。我知道我可以手动重构字符串的一部分,但那感觉不太对。
有什么想法吗?

你的意思是你觉得 $2 OFS $3 不对吗?你是在寻找一个 awk 内置函数或其他方法来实现它吗? - Kent
我甚至还不知道$2 OFS $3是什么意思 :) 这就是为什么我在问的原因。 - iksemyonov
2个回答

2

我不太确定这是否是你想要的:

kent$  echo "foo.bar.baz.test"|awk  'BEGIN{FS=OFS="."}{print $2,$3}'
bar.baz

编辑

我需要将它推广到未知数量的字段(不是硬编码$2,$3,而是从$2开始的所有内容直到结尾-这是可能的吗?)

请参见下面的测试:

kent$  echo "a.b.c.d.e.f.g.h.j.foo.bar"|awk 'BEGIN{FS=OFS="."}{for(i=2;i<=NF;i++)s=i==NF?s $i:s $i OFS;print s}'
b.c.d.e.f.g.h.j.foo.bar

好的,我需要学习关于OFS组件的知识。谢谢您提供的提示! 此外,我需要将它推广到未知数量的字段(不会硬编码 $2,$3,但是从 $2 开始一直到末尾的所有内容-这可行吗?) - iksemyonov

2
这可能适合您:
echo foo.bar.baz.test | awk -F. -vOFS=. '{print $2,$3}'
bar.baz

在打印命令中,,是输出字段分隔符(OFS)的简写。

你那里可能打错了吗?-vOFS=. 是不是缺少了一个空格? - iksemyonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接