linux awk,sort,grep,sed指令简单应用(ip连接数,排前10的url,某一时间段的ip连接数)

例子

通过日志查看当天ip连接数,过滤重复:

1、查看nginx/apc进程:nginx/httpd

[root@localhost ~]# ps -ef | grep nginx
root       7294      1  0 01:15 ?        00:00:00 nginx: master process /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
www        7296   7294  0 01:15 ?        00:00:00 nginx: worker process
root       7647   7620  0 01:17 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# ps aux | grep nginx
root       7294  0.0  0.0  20956   940 ?        Ss   01:15   0:00 nginx: master process /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
www        7296  0.0  0.1  21440  1916 ?        S    01:15   0:00 nginx: worker process
root       7654  0.0  0.0 112708   988 pts/0    R+   01:18   0:00 grep --color=auto nginx
[root@localhost ~]# ps aux | grep nginx | grep -v grep | wc -l
2

备注:ps -ef 与ps aux  是两种风格不同,输出略有不同;
wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。-c 统计字节数。-l 统计行数。-m 统计字符数。这个标志不能与 -c 标志一起使用。-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。-L 打印最长行的长度。-help 显示帮助信息--version 显示版本信息

wc 文档

2、当天ip连接数最高的ip都在访问什么(去掉参数  sed 文本替换)

[root@localhost log]# awk '{print $9}' log_2019-03-14.log | sort | uniq -c | sort -nr | head -n 10
 150812 http://blog.ci123.com/main.html
 125915 http://blog.ci123.com/images/rbgs.gif
  67402 http://blog.ci123.com/yixinbaobaodekuaile/categories/340176&pstyle=2&pstyle=0&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=0&pst&pstyle=2&pstyle=0&pstyle=0&pstyle=2&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=2&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&&pstyle=0&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=0&pstyle=2&pstyle=2
  61913 http://blog.ci123.com/images/bgs.gif
  22552 http://blog.ci123.com/
   6614 http://blog.ci123.com/js/validate.js?v=1
   5281 http://blog.ci123.com/js/common.js?v=6
   3966 http://blog.ci123.com/images/rss_button.gif
   3785 http://blog.ci123.com/images/tplogo.gif
   3611 http://blog.ci123.com/images/muying.jpg

去掉参数 sed

[root@localhost log]# cat log_2019-03-14.log | sed -e "s/&.*//g" | awk '{print $9}' | sort | uniq -c | sort -nr | head -n 10  

最高访问最高的ip在干嘛,

cat log_2019-03-14.log | grep "119.57.159.182" | grep '14/Mar/2019' | awk '{print $9}' | sort | uniq -c | sort -nr

备注:head (head) 用来显示档案的开头至标准输出中。

如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。如果不指定文件,或者文件为"-",则从标准输入读取数据。

-c,  --bytes=[-]K    显示每个文件的前K 字节内容;如果附加"-"参数,则除了每个文件的最后K字节数据外 显示剩余全部内容
-n, --lines=[-]K    显示每个文件的前K 行内容;如果附加"-"参数,则除了每个文件的最后K行外 显示剩余全部内容
-q, --quiet, --silent    不显示包含给定文件名的文件头
-v, --verbose        总是显示包含给定文件名的文件头
    --help        显示此帮助信息并退出
    --version        显示版本信息并退出

 

 uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

 uniq 可检查文本文件中重复出现的行列。

uniq 文档

3、当天访问页面排前10的url

[root@localhost log]# cat log_2019-03-14.log | grep "14/Mar/2019" | awk '{print $1}' | uniq -c | sort -nr | head -n 10
     59 1***6.96
     57 6***.247
     50 6***.247
     44 6***.247
     44 2****186
     44 1***3.23
     43 6****5.247
     43 1***20.243
     43 1***34.65
     42 1***36.96

4、查看某一时间段的ip连接数(以及总数  wc -l)

   1725 1***9.181
   1745 47***8.216
   1752 47***.216
   1772 4***8.142
   1806 39**72.228
   2657 12***40.176
   3237 11***59.182
[root@localhost log]# grep "2019:0[7-9]" log_2019-03-14.log | awk '{print $1}' | sort | uniq -c | sort -n
[root@localhost log]# cat log_2019-03-14.log | grep "14/Mar/2019" | awk '{print $1}' | sort | uniq -c | sort -nr | wc -l
196256

5、通过日志查看当天ip连接数,过滤重复:(并计算总数)

  13429 11**.183
  13625 39****2.228
  13724 4***8.216
  15115 12***.176
  26320 11***182
[root@localhost log]# grep "14/Mar/2019" log_2019-03-14.log | awk '{print $1}' | sort | uniq -c | sort -n

特定url 数

[root@localhost log]# grep "http://bl*****/js/common.js?v=6" log_2019-03-14.log | awk '{print $9}' | sort | uniq -c | sort -n
      1 http://b****om/js/common.js?v=6&_fp662=0.6628273894087775
   5281 http://b****om/js/common.js?v=6


6、查看80端口的tcp连接:
netstat -tan | grep “ESTABLISHED” | grep “:80″ | wc -l
7、用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr
接着从日志里查看该ip在干嘛:
cat access_log | grep 122.102.7.212| awk ‘{print $1″\t”$8}’ | sort | uniq -c | sort -nr | less

 

 

sort 对文件内容进行排序

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
-b:忽略每行前面开始的空格字符,空格数量不固定时,该选项几乎是必须要使用的("-n"选项隐含该选项,测试发现都隐含)
-c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序
-C:类似于"-c",只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序
-d:只处理英文字母、数字及空格,忽略其他的字符
-f:将小写字母视为大写字母
-h:使用易读性数字(例如:2K、1G)
-i:除了040至176之间的ASCII字符外(八进制0-177),忽略其他的字符(忽略无法打印的字符如退格/换页键/回车)
-k:以哪个区间 (field) 来进行排序
-m:将几个排序好的文件进行合并,只是单纯合并,不做排序
-M:将前面3个字母依照月份的缩写进行排序
-n:依照数值的大小排序
-o<输出文件>:将排序后的结果存入指定的文件
-r:降序
-u:忽略相同行
-t<分隔字符>:指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符

参考例子  https://www.jianshu.com/p/c4d159a98dd8

 

 

linux中grep命令的用法

 

awk 用法(使用入门)

 

sed命令详解

<think>我们有一个需求:使用grep命令除时间因素后查找重复日志并统计重复次数。具体要求是忽略每行日志的20个字节(可能是时间戳),然后对剩余内容进行匹配,找出重复的日志行并统计重复次数。 分析: 1. 日志通常每行以时间戳开头,例如:"2023-01-01 12:00:00 [INFO] ...",我们想要忽略时间戳部分(假设20个字节是时间戳)。 2. 我们需要将每行日志去掉20个字节后的内容进行比较,相同的行即为重复日志(忽略时间差异)。 3. 然后统计这些重复日志出现的次数。 步骤: 我们可以使用以下方法: 1. 使用`cut`命令去掉每行的20个字节,或者使用`sed`命令去除每行的20个字符。 2. 然后对处理后的内容进行排序,以便使用`uniq`命令统计重复次数。 3. 使用`uniq -c`来统计重复次数。 具体命令: 假设日志文件名为`app.log`,我们可以这样处理: ```bash cut -c 21- app.log | sort | uniq -c | sort -nr ``` 解释: - `cut -c 21-`:从每行的第21个字符开始截取(即去掉20个字符)。 - `sort`:排序,因为`uniq`命令要求输入是排序过的。 - `uniq -c`:统计重复行并显示重复次数。 - `sort -nr`:按照重复次数(数值)逆序排序,这样重复次数多的面。 但是,这样会丢失原始日志的时间戳,我们只是用截取后的部分来统计重复。如果我们还想在结果中看到重复日志的原始行(包括时间戳),那么上面的方法就不行了。 如果我们希望保留原始日志行,但根据去掉时间戳后的内容进行重复统计,并显示重复次数,同时显示原始日志行,我们可以这样做: 思路: 1. 我们可以在每行面加上一个“标记”,这个标记是去掉时间戳后的内容,然后使用这个标记来统计重复。 2. 然后我们根据这个标记进行分组,并统计次数,同时输出原始行。 但是,这样输出会包含我们添加的标记,可能不太直观。 另一种方法:使用awk 我们可以用awk来记录每行去掉20个字符后的内容(作为key),然后统计每个key出现的次数,同时记录原始行(但这样记录所有原始行会导致输出很长,我们可能只希望输出重复的日志行,并且显示重复次数)。 如果我们只关心重复次数,不关心具体是哪条原始日志(因为时间戳不同,所以每条原始日志都不同),那么我们可以只输出重复内容(去掉时间戳)和重复次数,而不显示原始日志。 但是,如果用户希望看到重复的日志行(任意一条代表),那么我们可以输出一条原始日志行以及重复次数。 这里我们分两种情况: 情况一:只输出重复的内容(去掉时间戳后的部分)和重复次数 命令: ```bash cut -c 21- app.log | sort | uniq -c | sort -nr ``` 情况二:输出重复次数和一条原始日志(带时间戳)作为代表 我们可以这样: 1. 使用awk,用去掉20个字符后的内容作为key,同时记录原始行(只记录一次,因为重复的行我们只关心次数,所以原始行我们只保留第一次出现的那条?或者任意一条都可以) 2. 同时统计每个key出现的次数。 命令: ```bash awk '{key = substr($0, 21); count[key]++; if (count[key]==1) {first_line[key]=$0}} END {for (key in count) {if (count[key]>1) {print count[key], first_line[key]}}}' app.log | sort -nr ``` 解释: - `substr($0,21)`:从第21个字符开始截取到末尾(作为key)。 - `count[key]++`:统计每个key出现的次数。 - `if (count[key]==1) {first_line[key]=$0}`:当第一次遇到这个key时,记录下这一行(原始行)。 - 最后,在END块中,我们遍历所有key,如果该key出现次数大于1(重复),则输出次数和第一次出现的原始行。 - 最后用`sort -nr`按重复次数降序排序。 但是,这样会输出所有重复的日志(每个重复组输出一次),并显示重复次数和一条原始日志。 注意:如果日志量很大,这种方法可能会占用较多内存,因为要存储每个key和一条原始行。 如果日志文件非常大,我们可以考虑使用排序的方法,但保留原始行: 另一种方法: ```bash # 给每行添加一个缀:去掉时间戳后的内容,然后加上原始行,用冒号分隔(确保原始行没有冒号?如果日志中有冒号可能会冲突,所以我们可以用其他分隔符,比如制表符) # 然后对这个缀进行排序,这样相同缀的行会在一起 # 然后使用awk来统计相同缀的重复次数,并输出重复次数和原始行(只输出一次) awk '{printf("%s\t%s\n", substr($0,21), $0)}' app.log | sort | uniq -c | sort -nr | awk '{if ($1>1) {print $1, $3}}' # 但是这样会丢失原始行的其他部分,因为我们只取了第三列(实际上原始行可能包含空格,所以用制表符分隔后,原始行在第二列之后) 修正:因为我们在面加了一个字(即去掉时间戳后的内容),然后用制表符分隔,后面是原始行。但是原始行可能包含制表符,所以最好用不会出现在日志中的特殊字符作为分隔符。 但是,为了简单,我们可以不使用awk,而用另一种方式: 我们可以先使用: ```bash # 将每行处理成:<去掉时间戳的部分> <原始行>,然后排序,然后统计 # 但是这样排序后,我们想按去掉时间戳的部分分组,并统计,同时输出原始行 使用awkawk '{key = substr($0,21); print key, $0}' app.log | sort | uniq -c -f 1 | sort -nr # 但是uniq的-f参数是跳过指定个数的字,这里我们跳过第一个字(即key),然后比较后面的部分(即原始行)?这不对,因为这样统计的是原始行的重复,而原始行因为时间戳不同不会重复。 所以这个方法不行。 因此,我们回到之awk的方法(记录第一次出现的行)或者用cut方法(只显示内容,不显示原始行)。 根据需求,如果用户需要看到原始日志行,那么我们可以输出每个重复组的一条代表行(比如第一次出现的行)和重复次数。 因此,我们采用之awk记录第一次出现行的方法。 但是注意:如果日志文件非常大,这种方法可能会占用大量内存。如果文件很大,我们可以考虑使用排序和后续处理。 大文件优化方案: 步骤: 1. 使用awk生成一个临时文件,其中每行格式为:<去掉20字节的key> <原始行> 2. 对这个临时文件按key排序 3. 使用awk遍历排序后的文件,统计相同key的行数,当key变化时,输出一个key的统计结果和一条原始行(取第一条) 4. 最后过滤掉只出现一次的 具体命令: ```bash awk '{print substr($0,21) "\t" $0}' app.log > temp.log sort -t $'\t' -k1,1 temp.log | awk -F '\t' ' { if (NR==1) { current_key=$1; count=1; first_line=$2; } else { if ($1 == current_key) { count++; } else { if (count>1) { print count, first_line; } current_key=$1; count=1; first_line=$2; } } } END { if (count>1) { print count, first_line; } }' | sort -nr ``` 这个命令可以避免在内存中存储所有key,但是需要临时文件,并且排序。 考虑到用户可能希望简单的方法,而且日志文件不是特别大,我们可以推荐第一种awk方法(在内存中记录)。如果文件很大,再考虑第二种。 因此,根据实际情况,我们给出两种方案。 方案一(适用于小文件): ```bash awk '{key = substr($0, 21); count[key]++; if (count[key]==1) {first_line[key]=$0}} END {for (key in count) {if (count[key]>1) {print count[key], first_line[key]}}}' app.log | sort -nr ``` 方案二(适用于大文件): ```bash # 使用临时文件,避免占用过多内存 # 步骤: # 1. 生成临时文件,格式:key(去掉20字符) + 制表符 + 原始行 awk '{print substr($0,21) "\t" $0}' app.log > temp.log # 2. 按key排序 sort -t $'\t' -k1,1 temp.log > sorted.log # 3. 遍历排序后的文件,统计相同key的数量,并记录第一条原始行 awk -F '\t' ' { if (NR==1) { current_key=$1; count=1; first_line=$2; } else { if ($1 == current_key) { count++; } else { if (count>1) { print count, first_line; } current_key=$1; count=1; first_line=$2; } } } END { if (count>1) { print count, first_line; } }' sorted.log | sort -nr # 4. 删除临时文件 rm temp.log sorted.log ``` 但是,方案二在最后输出时,每个重复组只输出一次,并且按重复次数排序。 根据用户需求,我们可能还需要考虑: - 时间戳的字节数是否固定?如果固定20字节,那么没问题。如果不固定,那么我们需要其他方法提取非时间部分。 在问题中,用户指定了“忽略20字节”,所以我们假设时间戳是固定20字节。 总结: 我们推荐使用方案一,除非文件非常大。因为方案一简单,而且对于一般大小的日志文件,内存占用是可以接受的。 因此,命令为: ```bash awk '{key = substr($0, 21); count[key]++; if (count[key]==1) {first_line[key]=$0}} END {for (key in count) {if (count[key]>1) {print count[key], first_line[key]}}}' app.log | sort -nr ``` 这个命令会输出重复次数和一条原始日志行(第一次出现的)。 注意:如果日志中没有重复,则不会输出任何内容。如果希望看到所有行(包括不重复的),可以去掉`if (count[key]>1)`条件,但用户需求是统计重复日志。 如果用户希望看到重复的日志行(所有重复行)以及重复次数,那么我们可以输出所有重复行,并在每行面加上重复次数。但这样重复次数会在多个行重复显示(每个重复行都显示同样的重复次数)。这可能会让用户觉得冗余。 我们可以这样: ```bash awk '{key = substr($0,21); count[key]++; if (count[key]==1) {first_line[key]=$0; lines[key]=$0} else {lines[key]=lines[key] RS $0}} END {for (key in count) {if (count[key]>1) {print count[key], lines[key]}}}' app.log | sort -nr ``` 但是这样输出的lines[key]保存了所有行,用换行符连接,所以会输出一个多行的字符串。这样输出可能比较混乱。 因此,我们建议只输出一条代表行,如果用户需要看所有重复行,可以再根据这个代表行去原日志中搜索(因为代表行去掉时间戳后的内容就是重复部分,所以可以用这个内容去原日志中grep)。 所以,我们最终采用方案一。 示例输出: 假设日志文件app.log内容: 2023-01-01 00:00:00 Error: file not found 2023-01-01 00:00:01 Error: file not found 2023-01-01 00:00:02 Error: permission denied 2023-01-01 00:00:03 Error: file not found 运行命令后,输出: 3 2023-01-01 00:00:00 Error: file not found 注意:这里重复次数为3,因为有三条相同的(去掉时间戳后都是"Error: file not found"),并且输出的是第一次出现的行。 如果用户希望看到重复的每一行,那么我们可以修改一下,在统计时记录行号,然后在最后输出重复组的所有行。但这样输出会很长,而且重复组之间难以区分。 因此,我们建议先输出重复次数和一条代表行,如果用户需要查看详情,再根据代表行的内容(去掉时间戳后)去原日志中搜索。 例如,搜索“Error: file not found”: ```bash grep -F 'Error: file not found' app.log ``` 所以,我们提供的方案是合理的。 最后,我们给出完整的命令: ```bash awk '{key = substr($0, 21); count[key]++; if (count[key]==1) {first_line[key]=$0}} END {for (key in count) {if (count[key]>1) {print count[key], first_line[key]}}}' app.log | sort -nr ``` 如果用户希望输出格式更美观,可以稍作调整,比如: ```bash ... | awk '{print "重复次数: " $1, "示例日志: " substr($0, length($1)+2)}' ``` 但是这样会使得后续处理不便,所以直接输出即可。 另外,如果用户希望看到重复内容(去掉时间戳)而不是原始行,那么可以使用cut方法,输出更简洁。 所以,我们也可以提供cut方法: ```bash cut -c 21- app.log | sort | uniq -c | sort -nr | awk '{if ($1>1) print $0}' ``` 这个命令输出的是重复次数和去掉时间戳后的内容。 例如: 3 Error: file not found 用户可以根据需要选择。 因此,我们提供两种选择: 选择一:输出重复次数和原始日志行(一条代表) 命令1: ```bash awk '{key = substr($0, 21); count[key]++; if (count[key]==1) first_line[key]=$0} END {for (key in count) if (count[key]>1) print count[key], first_line[key]}' app.log | sort -nr ``` 选择二:输出重复次数和重复内容(去掉时间戳) 命令2: ```bash cut -c 21- app.log | sort | uniq -c | sort -nr | awk '$1>1' ``` 用户可以根据需求选择使用。 注意:如果日志行不足21个字符,使用`substr($0,21)`会返回空字符串,而`cut -c21-`会输出空行。所以需要确保日志行至少21个字符。如果不足,我们可以先判断长度。 改进命令1(处理行长不足21): ```bash awk '{key = (length($0)>=21 ? substr($0,21) : $0); count[key]++; if (count[key]==1) first_line[key]=$0} END {for (key in count) if (count[key]>1) print count[key], first_line[key]}' app.log | sort -nr ``` 同样,命令2中,如果行不足21字符,cut会输出空行,但统计仍然正确。 因此,我们建议使用改进后的命令1。 综上所述,我们给出最终答案。</think>要使用 `grep` 忽略日志20字节(通常是时间戳),统计重复日志并计算重复次数,可以通过组合 `cut`、`sort` 和 `uniq` 命令实现。以下是完整解决方案: ### 解决方案 ```bash # 1. 忽略20字节,统计重复行及次数 cut -c 21- logfile.log | sort | uniq -c | sort -nr # 2. 查看完整日志(带时间戳)及重复次数 awk '{key = substr($0,21); count[key]++} END {for (i in count) if (count[i]>1) print count[i], i}' logfile.log | sort -nr | while read count log; do grep -m1 -F "$log" logfile.log | awk -v c="$count" '{print c, $0}' done ``` ### 分步解释 1. **忽略时间戳并统计重复** ```bash cut -c 21- logfile.log # 截取第21字节到行尾 sort # 排序相同日志行 uniq -c # 统计重复次数 sort -nr # 按重复次数降序排序 ``` **输出示例**: ``` 5 用户登录失败 user_id=304 3 数据库连接超时 ``` 2. **关联原始日志(带时间戳)** 通过 `awk` 建立日志内容与计数的映射,然后匹配原始文件: ```bash awk '{key = substr($0,21); count[key]++}...' # 统计非时间戳部分 grep -m1 -F "$log" logfile.log # 查找第一条完整日志 ``` ### 处理效果 原始日志 (`logfile.log`): ``` 2023-10-01T12:00:00 用户登录失败 user_id=304 2023-10-01T12:00:05 用户登录失败 user_id=304 2023-10-01T12:01:10 数据库连接超时 2023-10-01T12:01:15 数据库连接超时 ``` 命令输出: ``` 5 2023-10-01T12:00:00 用户登录失败 user_id=304 3 2023-10-01T12:01:10 数据库连接超时 ``` ### 注意事项 1. **时间戳长度**:`-c 21-` 假设时间戳固定20字节,如长度变化需调整 2. **特殊字符**:若日志含特殊符号(`/`、`.` 等),在 `grep -F` 中加转义 3. **大文件优化**:超100MB日志建议分步处理,避免内存溢出: ```bash cut -c 21- large.log | sort -T /tmp > sorted.log uniq -c sorted.log | sort -nr > counts.log ``` --- ### 相关问题 1. **如何用 `grep` 除特定时间的日志?** > 使用 `sed` 或 `awk` 过滤时间范围后统计,例如: > `sed -n '/2023-10-01T12:00:00/,/2023-10-01T13:00:00/p' logfile.log | cut -c 21- | sort | uniq -c` 2. **统计时如何忽略大小写和空白符差异?** > 添加 `tr` 和 `sed` 归一化数据: > `cut -c 21- logfile.log | tr 'A-Z' 'a-z' | sed 's/[[:space:]]\+/ /g' | sort | uniq -c` 3. **如何将重复日志导出到单独文件?** > 结合 `tee` 和循环处理: > `cut -c 21- logfile.log | sort | uniq -c | awk '$1>1 {print $2}' | while read line; do grep -F "$line" logfile.log; done > duplicates.log` 4. **高并发日志中如何实时检测重复?** > 用 `tail -f` 管道实时处理: > `tail -f logfile.log | cut -c 21- | awk '{print $0, systime()}' | uniq -c -w 100` > (`-w 100` 控制检测窗口宽度)[^3] [^1]: 引用参考:`cut` 命令用于精确截取字节流,相比 `grep` 更适合处理固定位置的内容 [^2]: `uniq -c` 是统计重复行的核心工具,需预先排序输入数据 [^3]: 实时处理需注意时间窗口设置,避免内存溢出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值