繁体   English   中英

如何在CentOS最小安装中的AWK中使用多个字段分隔符

[英]How to use multiple field separators in awk in CentOS minimal install

我有一个看起来像这样的输入日志文件:

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' ADD |,' '/ADD/{print "ADD", $2, $3}' File
ADD ahay844 Akeem Haynes
ADD afro438 Adam Froese
ADD atra522 Allison Track

因为不使用空格分隔,所以即使该人的名字是中间名,这也将起作用。

限制:如果其他字段包含space-ADD-space,则输出可能是错误的。

使用sed

$ sed -nE '/ ADD /{s/([^ ]* ){5}//; s/(,[^,]*),.*/\1/p}' File
ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track

在包含ADD行上,这使用两个替代命令:

  1. s/([^ ]* ){5}//删除前五个以空格分隔的字段。

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

同样,因为不使用空格分隔,所以即使该人的名字是中间名,这也将起作用。

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

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

grep

$ cat ip.txt 
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

$ grep -o 'ADD[^,]*,[^,]*' ip.txt 
ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
  • ADD[^,]* ADD后跟零个或多个非逗号字符
  • ,逗号
  • [^,]*零个或多个非逗号字符
  • 由于*是贪婪的,因此它将尝试匹配尽可能多的字符

awk与split:

$ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM