我有一个如下所示的输入日志文件:
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
提前感谢您提供的任何帮助
答案 0 :(得分:2)
此方法将字段分隔符设置为ADD
或,
:
$ awk -F' ADD |,' '/ADD/{print "ADD", $2, $3}' File
ADD ahay844 Akeem Haynes
ADD afro438 Adam Froese
ADD atra522 Allison Track
由于未使用空格分隔,即使此人具有中间名,也可以使用。
限制:如果其他字段包含空格A-D-D空格,则输出可能是错误的。
$ 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/
删除除逗号分隔的第一个字段以外的所有字段。
同样,由于未使用空格分隔,即使此人具有中间名,这也会起作用。
答案 1 :(得分:1)
awk -F'[ ,]' '{print $6,$7","$8,$9}' file
ADD ahay844,Akeem Haynes
ADD afro438,Adam Froese
ADD atra522,Allison Track
答案 2 :(得分:1)
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后跟零个或多个非逗号字符,
逗号[^,]*
零个或多个非逗号字符*
贪婪,它会尝试匹配尽可能多的字符答案 3 :(得分:1)
awk with 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