Linux 如何在CentOS minimal install中的awk中使用多个字段分隔符

Linux 如何在CentOS minimal install中的awk中使用多个字段分隔符,linux,awk,centos,field,separator,Linux,Awk,Centos,Field,Separator,我有一个如下所示的输入日志文件: 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,ca

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

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
提前感谢您使用awk提供的任何帮助

此方法将字段分隔符设置为ADD或,:

因为不使用空格分隔,所以即使此人有中间名,也可以使用空格分隔

awk -F'[ ,]' '{print $6,$7","$8,$9}' file

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
限制:如果其他字段包含space-A-D-D-space,则输出可能错误

使用sed 在包含ADD的行上,这将使用两个替换命令:

s/[^]*{5}//删除前五个空格分隔的字段

s/,[^,]*,.*/\1/删除除第一个逗号分隔字段外的所有字段

同样,由于不使用空格分隔,即使此人有中间名,也可以使用空格分隔。

使用awk
awk -F'[ ,]' '{print $6,$7","$8,$9}' file

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
此方法将字段分隔符设置为ADD或,:

因为不使用空格分隔,所以即使此人有中间名,也可以使用空格分隔

awk -F'[ ,]' '{print $6,$7","$8,$9}' file

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
限制:如果其他字段包含space-A-D-D-space,则输出可能错误

使用sed 在包含ADD的行上,这将使用两个替换命令:

s/[^]*{5}//删除前五个空格分隔的字段

s/,[^,]*,.*/\1/删除除第一个逗号分隔字段外的所有字段

同样,由于不使用空格分隔,即使此人有中间名,也可以使用空格分隔。

使用grep

awk -F'[ ,]' '{print $6,$7","$8,$9}' file

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
添加[^,]*添加后跟零个或多个非逗号字符 逗号 [^,]*零个或多个非逗号字符 由于*是贪婪的,它将尝试匹配尽可能多的字符 和格雷普

添加[^,]*添加后跟零个或多个非逗号字符 逗号 [^,]*零个或多个非逗号字符 由于*是贪婪的,它将尝试匹配尽可能多的字符 带拆分的awk:

$ awk -F, '{ split($1, a, " "); print "ADD", a[length(a)] "," $2 }' file.txt

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
带拆分的awk:

$ awk -F, '{ split($1, a, " "); print "ADD", a[length(a)] "," $2 }' file.txt

ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track

使用突出显示文本编辑框左上角的{}格式工具将其格式化为代码/数据/输出。祝你好运。示例输入的最后一行结束于加拿大CT Allison Track,似乎缺少前两行中的字段。也许是Allison Smith,女性,Track,CA,Canada?@John1024是的,我想有人帮我编辑了它,结果它被剪掉了?@ChristopherJohnson:在你的问题的底部,你可以看到我的图标Sheller,点击n天前编辑的链接。您将看到,我的编辑并没有在示例数据的最后一行创建缺少的字段。在任何情况下,您都可以输入丢失的数据。祝你好运使用突出显示文本编辑框左上角的{}格式工具将其格式化为代码/数据/输出。祝你好运。示例输入的最后一行结束于加拿大CT Allison Track,似乎缺少前两行中的字段。也许是Allison Smith,女性,Track,CA,Canada?@John1024是的,我想有人帮我编辑了它,结果它被剪掉了?@ChristopherJohnson:在你的问题的底部,你可以看到我的图标Sheller,点击n天前编辑的链接。您将看到,我的编辑并没有在示例数据的最后一行创建缺少的字段。在任何情况下,您都可以输入丢失的数据。祝你好运。这是一个解决方案,可以为我工作,因为我仍然可以使用1美元的管道信息之前添加到单挑出日期和时间。非常感谢。这是一个解决方案,可以为我工作,因为我仍然可以使用1美元管道的信息之前添加,以单挑出日期和时间。非常感谢。