我有一个输入日志文件,如下所示:

Sep 24 22:44:57 192.168.1.9 cts4348 ADD ahay844,Akeem Haynes,Men,Athletics,AT,canada
Sep 24 22:46:26 192.168.1.9 cts4348 ADD afro438,Adam Froese,Men,Hockey,HO,canada
Sep 24 22:47:09 192.168.1.9 cts4348 ADD atra522,Allison Track,CT,canada

我只想输出有“add”的列和后面的两列,这两列是用户名和全名。在获取这些信息后,我将根据用户名和带有全名的注释生成一个帐户。我需要使用“空格”和“,”作为字段分隔符。
我当前使用的命令是:
cat cts4348 | awk -F' ' -v OFS=',' '{print $6 " " $7 $8}'

这里是我的输出:
ADD ahay844,AkeemHaynes,Men,Athletics,AT,canada
ADD afro438,AdamFroese,Men,Hockey,HO,canada
ADD atra522,AllisonTrack,CT,canada

提前感谢您的帮助

最佳答案

用锥子
此方法将字段分隔符设置为ADD,

$ awk -F' ADD |,' '/ADD/{print "ADD", $2, $3}' File
ADD ahay844 Akeem Haynes
ADD afro438 Adam Froese
ADD atra522 Allison Track

因为不使用空格分隔,所以即使此人有中间名,也可以使用空格分隔。
限制:如果其他字段包含space-a-d-d-space,则输出可能错误。
使用sed
$ sed -nE '/ ADD /{s/([^ ]* ){5}//; s/(,[^,]*),.*/\1/p}' File
ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track

在包含ADD的行上,它使用两个替换命令:
s/([^ ]* ){5}//删除前五个空格分隔的字段。
s/(,[^,]*),.*/\1/删除除第一个逗号分隔字段以外的所有字段。
同样,由于不使用空格分隔,即使此人有中间名,也可以使用空格分隔。

关于linux - 如何在CentOS最小安装中的AWK中使用多个字段分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39689395/

10-13 07:40