Articles of awk

在bash中超出文件大小限制

我已经在SUSE 10服务器,内核2.6.16.60,ext3文件系统上尝试了这个shell脚本 脚本有这样的问题: cat file | awk '{print $1" "$2" "$3}' | sort -n > result 该文件的大小约为3.2G,我得到这样的错误消息:超过文件大小限制 在这个shell中,ulimit -f是无限的 我把脚本改成这个之后 cat file | awk '{print $1" "$2" "$3}' >tmp sort -n tmp > result 问题没有了。 我不知道为什么,有谁能帮我解释一下?

bash子string提取指定​​的开始和结束字符

例如,我有一个日志文件有这个条目: [Wed Aug 08 11:39:41 2012] [error] [client 155.94.70.224] ModSecurity:[file“/etc/httpd/modsecurity.d/rules/base_rules/modsecurity_crs_20_protocol_violations.conf”] [line“271”] [ “标签”RULE_MATURITY / 5“] [标签”RULE_ACCURACY / 5“] [标签”RULE_ACCURACY / 7“] [tag” https://www.owasp.org/index.php/ModSecurity_CRS_RuleID-960020 “] [tag”PROTOCOL_VIOLATION / INVALID_HREQ“] [tag” http://www.bad-behavior.ioerror.us/文件/如何工作/ “]警告。 string匹配REQUEST_PROTOCOL中的“HTTP / 1.1”。 [hostname“webmail.white-art.co.uk”] [uri“/horde/themes/graphics/tree/plusonly.png”] [unique_id“UCJB7VveCGYAAG @ BHJgAAAAQ”] 我想提取所有以字符开始的string对[并且结束于] 。 我可以使用剪切或awk提取使用单个分隔符,但我需要提取开始[和结束]之间的string。 如何完成? 例如,我需要提取: “[标记”RULE_ACCURACY / 7“]” 和 “[严重性”通知“]” 从日志。 我find了一个解决scheme,首先我必须通过在每一行之后添加新行来爆炸日志] ,然后使用grep来search所需的string。 有没有更好的方法来做到这一点?

如何parsing和转换ini文件到bash数组variables?

我试图将一个ini文件转换成bash数组variables。 样本ini如下所示: [foobar] session=foo path=/some/path [barfoo] session=bar path=/some/path 所以这些成为: session[foobar]=foo path[foobar]=/some/path session[barfoo]=bar 等等。 现在,我只能拿出这个命令 awk -F'=' '{ if ($1 ~ /^\[/) section=$1; else if ($1 !~ /^$/) print $1 section "=" $2 }' 另外,还有一个问题是,它不会考虑到附近的空间。 我认为sed可能更适合这个工作,但我不知道如何在sed保存和存储一个用于部分名称的临时variables。 那么任何想法如何做到这一点?

如何删除“]”之后的一行中的所有字符与sed?

如何删除“]”之后的一行中的所有字符与sed? 我试图使用猫,awk grep一些文件。 现在我的线上线返回给我一些像 121.122.121.111] other characters in logs from sendmail…. 🙂 现在我想删除“]”后的所有字符(用“]”)。 我只想要121.122.121.111在我的输出。 我正在searchsed的特定示例,但在这些示例中找不到任何帮助。

Linux shell命令按行长度过滤文本文件

我有一个30GB的磁盘分区的磁盘映像(想dd if=/dev/sda1 of=diskimage ),我需要恢复一些文本文件。 数据雕刻工具像foremost只适用于具有明确定义的头文件,即不是纯文本文件,所以我已经退缩在我的好朋友strings 。 strings diskimage > diskstrings.txt生成了一个3gb的文本文件,其中包含一些string,大部分没用的东西,与我真正想要的文本混合在一起。 大部分的垃圾往往是非常长的,不间断的乱码。 我感兴趣的东西是保证less于16kb,所以我要过滤文件的行长。 这里是我用来做的Python脚本: infile = open ("infile.txt" ,"r"); outfile = open ("outfile.txt","w"); for line in infile: if len(line) < 16384: outfile.write(line) infile.close() outfile.close() 这是有效的,但为了将来的参考:是否有任何神奇的单行咒语(想awk , sed ),将过滤文件的行长?

awk可以用来代替吗?

我想从这里得到rating的数字作为输出 # nc localhost 9571 language: language:en_ZA.UTF-8 language:en_ZW.UTF-8 session-with-name:Ubuntu Classic (No effects):gnome-session –session=2d-gnome session-with-name:Ubuntu (Safe Mode):gnome-session -f –session=2d-gnome session-with-name:Ubuntu Classic:gnome-session –session=classic-gnome xsession:/etc/X11/Xsession rating:94 我可以这样做 # nc localhost 9571 | grep rating | cut -d: -f2 94 但可以用awk来代替更简单的解决scheme?

最好的方法来获得eth0的MAC?

有没有更有效的方法来检索Linux中的网卡的MAC地址? 这工作: ip link show dev eth0 | awk ' /link\/ether/ { print $2 }' 但可以通过类似的东西find它: cat /sys/net/something

如何获取.ssh / authorized_keys(2)文件的所有指纹

是否有一个简单的方法来获取在.ssh / authorized_keys ||中input的所有指纹列表 .ssh / authorized_keys2文件? ssh-keygen -l -f .ssh/authorized_keys 将只返回第一行/入口/公钥的指纹 用awk破解: awk 'BEGIN { while (getline < ".ssh/authorized_keys") { if ($1!~"ssh-(r|d)sa") {continue} print "Fingerprint for "$3 system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \ ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \ rm /tmp/authorizedPublicKey.scan" ) } }' 但有没有更简单的方法或SSH命令我没有find?

如何拆分PEM文件

注意:这不是一个真正的问题,因为我已经find了答案,但是因为我在这里找不到它,所以我会发布它,这样可以使其他人受益。 问题:如何读取apache / mod_ssl指令SSLCACertificateFile使用的连接的PEM文件? 回答(原创) ( 来源 ): cat $file|awk 'split_after==1{n++;split_after=0} /—–END CERTIFICATE—–/ {split_after=1} {print > "cert" n ".pem"}' 如果最后有一个空行,这可能会留下一个空文件,例如使用openssl pkcs7 -outform PEM -in my-chain-file -print_certs 。 为防止出现这种情况,请在打印之前检查行的长度: cat $file|awk 'split_after==1{n++;split_after=0} /—–END CERTIFICATE—–/ {split_after=1} {if(length($0) > 0) print > "cert" n ".pem"}' 回答29/03/2016 : 在@slugchewer 答案之后 , csplit可能是一个更清晰的选项: csplit -f cert- $file '/—–BEGIN CERTIFICATE—–/' '{*}'

如何找出networking上所有机器的MAC地址

有没有一些简单的方法来找出我的networking上的所有计算机的MAC地址,而不是做一个SSH到每个和ifconfig | grep HWaddr ifconfig | grep HWaddr如果networking上有300台机器,我真的需要一些简单的解决scheme。