Articles of awk

Shell脚本阻止proftp失败尝试

我想筛选和阻止尝试访问我的proftp服务器失败。 以下是/ var / log / secure文件中的一行示例: Jan 2 18:38:25 server1 proftpd[17847]: spy1.XYZ.com (93.218.93.95[93.218.93.95]) – Maximum login attempts (3) exceeded 有几条这样的线。 我想阻止任何IP这样的任何尝试两次。 这是我试图阻止这些IP的脚本。 tail -1000 /var/log/secure | awk '/proftpd/ && /Maximum login/ { if (/attempts/) try[$7]++; else try[$11]++; } END { for (h in try) if (try[h] > 4) print h; }' | while read […]

显示grepped模式的第n个实例

所以这是我的问题。 我有一个.csv文件(Current.csv)的问题,因为在整个数据中有逗号随机放置,所以awk-ing文件不会给我一个特定types的信息,我正在寻找固定的列号。 幸运的是,我意识到这个信息总是第三个date格式(m,mm)/(d,dd)/ yy。 所以我想下面的正则expression式来显示第i行内的date: awk -F',' '{if (NR==$i)print}' Current.csv | grep -o "[0-9]{1,2}/[0-9]{1-2}/[0-9]{1,2}" | echo 它不显示任何东西,我完全卡住了为什么。 我想显示第三个是想把这一切都投入到: awk {print $3} 关于awk的正则expression式search问题的任何想法? 采样线 “lettershere”,numbershere,“retardedbrokenquoteshere,MM / DD / YY,morestuff,MM / DD / YY,数字,MM / DD / YY

awk + ​​perl +得到awk语法的两个参数

请咨询我的awk语法有什么问题,以及如何解决这个问题(这个语法是在我的ksh脚本中),我在Linux机器上运行我的脚本 我的目标是从file.txt只得到date之间的行: 从2012年4月19日至2012年4月22日 备注 – 其他解决scheme可以用Perl [root@test1 /var/tmp]# a='2012/04/19' [root@test1 /var/tmp]# b='2012/04/22' [root@test1 /var/tmp]# awk -v A=$a -v B=$b '/A/,/B/' file.txt awk: syntax error near line 1 awk: bailing out near line 1 file.txt的 [ 2012/04/18 21:49:01:857 ] Monitor::handle_client_message(): [ 2012/04/18 21:50:02:379 ] Monitor::handle_client_message( [ 2012/04/18 21:57:52:64 ] Monitor::handle_client_message(): [ 2012/04/18 21:57:52:252 ] Monitor::handle_client_message( [ […]

从复杂的日志中收集IP

我有一个关于使用更高级的grep,awk,sed的问题。 我有一个专有MTA的日志文件,它包含一个string中的IP,由[redacted]^~xxxx^[redacted]分隔。 到目前为止,我所有的gre,,aw,和se has都没有让我走得很远。 该日志文件中有331520行。 我的目标是简单地刷出ip,然后用sed做一个for循环,以sed的/ $ i / redacted'。 我包括一个日志条目的样本。 如果你们有任何想法,我会非常感激。 Jun 4 15:21:52 host.name mta-name: 13388^~88/CC-04671-FCA0DCF4^~D^~<redactedmessageid>^~@^[email protected]^~redacted.hostname^~000.00.000.000^~port^~esmtp^~^~external_routing_nobounce^~0^~0.51^~subjectofmessage^~250 2.6.0 <redactedmessageid> [InternalId=2178458] Queued mail for delivery

内存使用情况REGEX

你能帮我修改下面的一行,以获得更精确的内存使用情况 – 现在这只是一个整数,我想包括昏迷后的第一个值。 free -m | awk '/Mem:/ {tot = $2;} /cache:/{printf "%d\n", $3 / tot * 100}' 谢谢

如何在Linux系统上显示可用磁盘?

如果我运行fdisk -l我得到一个输出为: Disk /dev/sda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0003ad9d Device Boot Start End Blocks Id System /dev/sda1 1 1306 10490413+ 83 Linux /dev/sda2 1307 2612 10490445 83 Linux Disk /dev/sdb: 120.0 GB, 120034123776 bytes 255 heads, 63 […]

awk忽略我为第一条logging设置的logging分隔符

我试图改变logging分隔符,但awk不使用logging分隔符我设置,直到第二个logging和以后。 我得到这样的输出: ARRAY /dev/md4 level=raid1 num-devices=2 metadata=0.90 UUID=e85beb4f:84b05929:786a31c9:93e269d4 ARRAY /dev/md6 level=raid1 num-devices=2 metadata=0.90 UUID=4dbc659a:4d11f1be:6cbe4d26:c1372c53 ARRAY /dev/md5 level=raid1 num-devices=2 metadata=0.90 UUID=7d34fc96:1fa6c3c5:b9932435:ad126815 ARRAY /dev/md3 level=raid1 num-devices=2 metadata=0.90 UUID=862ae8d0:bd00b2fd:9e171b97:2937fc49 ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=03bb1b77:42d474f4:608c5276:cc04d84c ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=6c14cddc:3ef74d2d:2f26fa3f:32cc274b ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=76e50525:9ae71e74:9697a0e6:6f77e132 我需要这样的输出: ARRAY=/dev/md4 level=raid1 num-devices=2 metadata=0.90 UUID=e85beb4f:84b05929:786a31c9:93e269d4 ARRAY=/dev/md6 level=raid1 num-devices=2 metadata=0.90 UUID=4dbc659a:4d11f1be:6cbe4d26:c1372c53 […]

别名replace文件中的文本

这里是一个实际的情况。我面对我的一些文件,这些文件中有一个共同的string。我通常会打开vi,做一些像 :%s/text/replacement/g 而且我必须在许多文件中多次执行它。 有没有一些简单的方法来做到这一点,或者我可以创build一些别名?

linux +仅将VALID IP从文本文件转换为其他文件

请build议如何仅匹配file.txt中的有效IP(255.255.255.255),并只将有效IP插入VALID_IP.txt文件 (例如,参见VALID_IP.txt) 解决scheme应该在我的ksh脚本中实现(所以perl或sed或awk也可以) 更多file.txt e32)5.500.5.5*kjcdr ##@$1.1.1.1+++jmjh 1.1.1.1333 33331.1.1.1 @5.5.5.?????? ~3de.ede5.5.5.5 1.1.1.13444r54 192.9.30.174 &&^#%5.5.5.5 :5.5.5.5@%%^^&* :5.5.5.5: **22.22.22.22 172.78.0.1()*5.4.3.277 VALID_IP.txt文件的例子 1.1.1.1 192.9.30.174 5.5.5.5 5.5.5.5 5.5.5.5 22.22.22.22 172.78.0.1

传递variables的问题 – Bash

我有一个下面的问题: #!/bin/bash NUM=`cat accounts | wc -l`; for i in {1..$NUM} do account=`awk "NR==$i" accounts`; echo -e "\nAccount: $account\n"; sudo ./backup_maildir $account; done “帐户”是一个具有常规电子邮件地址的文件,每行一个。 backup_maildir是期望的脚本。 当主脚本执行时,第6行成功地回显当前邮件地址,但是下面的行不会将该string传递给backup_maildir脚本。 如果$ accountvariables是[email protected],那么传递给backup_maildir的string是{[email protected]?}?! 这怎么可能? 如何解决?