如何使用awk insert"&引用;在第一列中输入字符串?

如何使用awk insert"&引用;在第一列中输入字符串?,awk,sh,Awk,Sh,我有一个包含一些数据的文件。 如何使用awk insert在第一列中插入字符串 输入文件 MAC Address Inventory MAC Address,IP Address 001a6b406ce8,172.18.1.1 001a6b50abdd,192.168.80.4 001a6b50f5e3,10.122.110.68 Total 3 输出文件 MAC Address Inventory MAC Address,IP Address 001a.6b40.6ce8,172.18.1.

我有一个包含一些数据的文件。 如何使用awk insert
在第一列中插入字符串

输入文件

MAC Address Inventory
MAC Address,IP Address
001a6b406ce8,172.18.1.1
001a6b50abdd,192.168.80.4
001a6b50f5e3,10.122.110.68
Total 3
输出文件

MAC Address Inventory
MAC Address,IP Address
001a.6b40.6ce8,172.18.1.1
001a.6b50.abdd,192.168.80.4
001a.6b50.f5e3,10.122.110.68
Total 3

我知道您要求的是
awk
,但这对于
sed
来说是很自然的:

$ sed -r '/^[0-9a-f]+,/ s/^(.{4})(.{4})(.{4})/\1.\2.\3/g' infile
MAC Address Inventory
MAC Address,IP Address
001a.6b40.6ce8,172.18.1.1
001a.6b50.abdd,192.168.80.4
001a.6b50.f5e3,10.122.110.68
Total 3
从您的示例来看,似乎只有在第一列包含12位十六进制数时才需要插入句点。因此,表达式
/^[0-9a-f]{12},/
告诉
sed
仅对第一列为十六进制数的行执行替换。然后,替换会抓住三组四人中的每一人,并在两组之间放置一段时间

在OSX或其他非GNU系统下,将
sed-r
替换为
sed-E

awk '{ sub(/^[[:xdigit:]]{4}/, "\&.", $0)
       sub(/^[[:xdigit:]]{4}\.[[:xdigit:]]{4}/, "\&.", $0)
       print }' input.file

它起作用了;也许有一种更优雅的方法可以做到这一点。

以下是一些使用
awk

awk 'gsub(/\./,".")==3 {$0=substr($0,1,4)"."substr($0,5,4)"."substr($0,9)}1' file
MAC Address Inventory
MAC Address,IP Address
001a.6b40.6ce8,172.18.1.1
001a.6b50.abdd,192.168.80.4
001a.6b50.f5e3,10.122.110.68
Total 3

要在
awk
中使用interval
{4}
,您需要
gnuawk
4.0
或更高版本。如果您使用的是较旧的版本,请使用
awk--re interval'code'
@Jotne:实际上我在Mac OS X 10.9.2上使用BSD
awk
(20070501)对其进行了测试。然而,我也在机器上安装了
gawk
3.1.7,但它不适用于我觉得奇怪的东西(无论如何,这是出乎意料的)。GNU
awk
也抱怨在与之前的反斜杠,但因为它无论如何都不匹配,所以没有多大区别。删除反斜杠与POSIX更加一致。
awk -F\. 'NF==4 {$0=substr($0,1,4)"."substr($0,5,4)"."substr($0,9)}1' OFS=\. file