我有一个包含一些数据的文件。
如何在第一列中使用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
答案 0 :(得分:2)
我知道您要求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
。
答案 1 :(得分:0)
awk '{ sub(/^[[:xdigit:]]{4}/, "\&.", $0)
sub(/^[[:xdigit:]]{4}\.[[:xdigit:]]{4}/, "\&.", $0)
print }' input.file
有效;可能有更优雅的方式来做到这一点。
答案 2 :(得分:0)
以下是使用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 -F\. 'NF==4 {$0=substr($0,1,4)"."substr($0,5,4)"."substr($0,9)}1' OFS=\. file