我在linux服务器上以特定格式获取日志
id \t IP \t login-id \t login-error Code \t attempts
我想知道用户可能遇到的所有可能的登录错误代码。
示例文件是:
123 10.12.34.234 anshul 11 1
432 10.12.34.234 ra 11 2
342 10.12.34.234 anshul 12 1
445 10.12.34.234 yahoo 3 1
,输出应为:
anshul: 11,12
我试过了:
cat aaa | sort +2 -3 | grep anshul | awk -F"\t" {' print $4'}
这会打印
11
12
但我希望输出的格式为anshul: 11,12
我们可以将值存储在某些变量中并根据需要显示。 此代码的问题是它是捕获所有anshul无论是anshulg还是anshuln或anshulp?任何解决此问题的建议。
我已经完成了登录时的排序,只是为了验证我得到的数据是否正确,因为所有唯一的名称都会被排序为单个块。
答案 0 :(得分:0)
awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' <your_file>|grep anshul
或者你可以直接使用没有grep的awk。
awk '{a[$3]=a[$3]","$4;next}END{print "anshul",substr(a["anshul"],2)}' <your_file>
测试如下:
> cat temp
123 10.12.34.234 anshul 11 1
432 10.12.34.234 ra 11 2
342 10.12.34.234 anshul 12 1
445 10.12.34.234 yahoo 3 1
> awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' temp
anshul 11,12
ra 11
yahoo 3
> awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' temp|grep anshul
anshul 11,12
>
> awk '{a[$3]=a[$3]","$4;next}END{print "anshul",substr(a["anshul"],2)}' temp
anshul 11,12
答案 1 :(得分:0)
1)简单的解决方案,但最后会得到额外的,
:
cat aaa | grep "anshul" | awk '{print $4}' | tr '\n' ','
输出:11,12,
2)没有额外的,
:
tmp=`cat aaa | grep "anshul" | awk '{print $4}' | tr '\n' ','`
echo ${tmp%?}
输出:11,12
当然,您可以轻松地将此转换为以用户名作为参数并输出类似“user:anshul error(s):11,12”的脚本
答案 2 :(得分:0)
#% cat t
123 10.12.34.234 anshul 11 1
432 10.12.34.234 ra 11 2
342 10.12.34.234 anshul 12 1
445 10.12.34.234 yahoo 3 1
一行Perl。
perl -ane 'BEGIN{$x='anshul';}push @{$X{@F[2]}}, $F[3];END{print "$x: ",join(",",@{$X{$x}}),"\n";}' < t
给出:
anshul: 11,12