我有一个包含以下文本的日志文件:
"Blablabla" [texttext] "text" 148 228 "blabla" "phrase 1"
"Blablabla" [texttext] "text" 220 211 "blabla" "phrase 1"
"Blablabla" [texttext] "text" 148 215 "blabla" "phrase 2"
"Blablabla" [texttext] "text" 220 245 "blabla" "phrase 3"
"Blablabla" [texttext] "text" 200 - "blabla" "phrase 4"
"Blablabla" [texttext] "text" 148 200 "blabla" "phrase 4"
我需要编写脚本,只使用第一个数字2的行**然后提取"短语X"并将他们的计数和比例放在另一个档案中。
我想用这样的东西
cat log.txt | grep '" 2..' > to something
但我无法弄清楚我应该使用什么 - sed,awk或其他任何东西。我想,我还需要使用bash数组。但是,我怎样才能使用循环来查找 - 是否已存在的短语?
感谢您的帮助。
UPD。我需要看到像
这样的东西1. Phrase 1 - 500 - 50%
2. Phrase 2 - 340 - 34%
3. Phrase 3 - 100 - 10%
4. Phrase 4 - 60 - 6%
是的,那是我的坏事,我已经忘记了。我只需要这些短语中的前十名。
答案 0 :(得分:1)
假设您指的是第4列,该列只有3位数字:
{
registration: {
nickname: 'foo',
email: 'bar',
password: 'password',
passwordConfirmation: 'password'
}
}
在您的情况下输出:
cat line_with_input | grep -E '.*\s.*\s.*\s2[0-9]{2}.*' | awk '{print $7" "$8}' | sort | uniq -c
编辑:所以你不想只计算不同的短语?
答案 1 :(得分:1)
对于您问题中的特定输入数据:
$ cat file1
"Blablabla" [texttext] "text" 148 228 "blabla" "phrase 1"
"Blablabla" [texttext] "text" 220 211 "blabla" "phrase 1"
"Blablabla" [texttext] "text" 148 215 "blabla" "phrase 2"
"Blablabla" [texttext] "text" 220 245 "blabla" "phrase 3"
"Blablabla" [texttext] "text" 200 - "blabla" "phrase 4"
"Blablabla" [texttext] "text" 148 200 "blabla" "phrase 4"
$ awk '$4~/2../{l++;a[$7FS$8]++}END{print "total phrases:" l; \
for (i in a) print i,"-", "Found:",a[i],"-","Ratio:",a[i]/l*100 "%"}' file1
total phrases:3
"phrase 1" - Found: 1 - Ratio: 33.3333%
"phrase 3" - Found: 1 - Ratio: 33.3333%
"phrase 4" - Found: 1 - Ratio: 33.3333%
显然,在这个例子中,总短语是指在字段4以2开头的行中找到的短语
为了获得前10名,一种简单的方法是运行上面的代码,然后使用sort + head:
$ awk 'your awk code here' file |sort |head #Head without options returns the top 10 lines.
PS:您需要调整排序选项以根据比率列或短语计数列(awk输出)进行排序。