如何使用awk insert“。”要在第一列中字符串?

时间:2014-04-25 05:32:15

标签: 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.1
001a.6b50.abdd,192.168.80.4
001a.6b50.f5e3,10.122.110.68
Total 3

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