- A+
其实已经积攒了不少心得,之前都没记下来。现在打算慢慢更新
获取每个IP访问量,并且排序
老的做法 cat log | awk ‘{print $1}’ | sort | uniq -c | sort -k1r
高效率的做法 cat log | awk ‘{a[$1]++} END {for (b in a) print b”\t”a[b]}’ | sort -k2r
通过数据自增来一次性去重。
衍生拓展
1.删除重复行
awk ‘!a[$0]++’ filename
2.合并同类项输出报表
张三 88
陈涛 78
陈涛 90
李四 77
王五 88
王五 99
张三 80
李四 90
输出成
张三 88 80
陈涛 78 90
王五 88 99
李四 77 90
awk ‘{a[$1]= a[$1]” ” $2} END {for (b in a) print b“ ”a[b]}’ filename
感谢我的前同事,李学明http://somethings.me/同志给予我shell学习方面的帮助和启发。
(P.S:这个脚本排上了大用场。采集党的福音)
N久前有一个excel整理关键词的相关性,这边shell版本的也搞定了一部分。
在大量关键词文件根目录下
awk -F”,” {print FILENAME$0}’ *.csv | //将文件名和关键词拼接
awk -F”,” ‘{if ($4 <50) print $1}’ | //将每月广泛搜索<50的过滤掉,同时可以把表头过滤掉
awk -F”1329|csv” ‘{print $1}’ > FILENAME //将文件名中乱七八糟的东西去掉,这边注意,只输出$1,上面的命令还需要输出一次$3,因为$1和$3的编码不一样,一个是ANSI,一个是UTF-8,放在一起没法弄,最后用ue或者ep改一下编码再贴到一起。
awk -F”,” ‘{ if (a[$1] < 10) {a[$1]++; print $0}}’ //只输出相关性前10的词
最后的结果是类似下面
A|A1
A|A2
A|A3
A|A4
…
B|B1
B|B2
B|B3
…
比较漂亮格式了。
文件行内去重
while read line
do
echo $line | awk ‘BEGIN{OFS=”\n”} {if($1=$1) print $0}’|sort -u| awk ‘{printf $0″ “}END{printf “\n”}’
done < test.txt
来源:夜息博客 http://www.imyexi.com/?p=502