标签: awk

你有任何有用的 awk 和 grep 脚本来解析 apache 日志吗?

我可以使用日志分析器,但通常我需要解析最近的网络日志以查看当前发生的情况。

我有时会做一些事情,比如找出请求某个文件的前 10 个 ip

cat foo.log | grep request_to_file_foo | awk '{print $1}' |  sort -n | uniq -c | sort -rn | head
Run Code Online (Sandbox Code Playgroud)

你的工具箱里有什么?

grep logging parsing awk apache-2.2

72
推荐指数
5
解决办法
14万
查看次数

如何拆分 PEM 文件

注意:这不是一个真正的问题,因为我已经找到了答案,但是由于我在这里不容易找到它,所以我将其发布,以便它可以使其他人受益。

问题:如何读取连接的 PEM 文件作为 apache/mod_ssl 指令SSLCACertificateFile使用的文件?

答案(原文)来源):

cat $file|awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
Run Code Online (Sandbox Code Playgroud)

如果末尾有一个空行,这可能会留下一个空文件,例如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"}' 
Run Code Online (Sandbox Code Playgroud)

回答 29/03/2016

按照@slugchewer answercsplit可能是一个更清晰的选择:

csplit -f cert- $file '/-----BEGIN CERTIFICATE-----/' '{*}'
Run Code Online (Sandbox Code Playgroud)

shell openssl awk x509

49
推荐指数
5
解决办法
10万
查看次数

bash/sed/awk/etc 删除所有其他换行符

一个 bash 命令输出这个:

Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active
Run Code Online (Sandbox Code Playgroud)

我想把它用管道输送到某个东西上,使它看起来像这样:

Runtime Name: vmhba2:C0:T1:L14 Group State: active 
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
Run Code Online (Sandbox Code Playgroud)

即删除所有其他换行符

我试过了,... |tr "\nGroup" " "但它删除了所有换行符并吃掉了其他一些字母。谢谢

bash awk sed

47
推荐指数
3
解决办法
3万
查看次数

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

有没有一种简单的方法来获取 .ssh/authorized_keys 中输入的所有指纹的列表?.ssh/authorized_keys2 文件?

ssh-keygen -l -f .ssh/authorized_keys 
Run Code Online (Sandbox Code Playgroud)

只会返回第一行/条目/公钥的指纹

用 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"
        )
    }
}'
Run Code Online (Sandbox Code Playgroud)

但是有没有更简单的方法或我没有找到的 ssh 命令?

ssh bash awk ssh-keygen ssh-keys

46
推荐指数
4
解决办法
2万
查看次数

如何找出网络上所有机器的mac地址

是否有一些简单的方法可以找出我网络上所有机器的 mac 地址,而不是对每个机器进行 SSH,ifconfig | grep HWaddr如果网络上有 300 台机器,我真的需要一些简单的解决方案。

find grep awk sed linux-networking

31
推荐指数
5
解决办法
9万
查看次数

获得 eth0 的 MAC 的最佳方法?

有没有更有效的方法来检索 Linux 中网卡的 MAC 地址?

这有效:

ip link show dev eth0 | awk ' /link\/ether/ { print $2 }'
Run Code Online (Sandbox Code Playgroud)

但可以通过以下方式找到:

cat /sys/net/something
Run Code Online (Sandbox Code Playgroud)

linux mac ethernet awk net

20
推荐指数
1
解决办法
5558
查看次数

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

我有一个 30gb 的磁盘分区(认为dd if=/dev/sda1 of=diskimage),我需要从中恢复一些文本文件。数据雕刻工具foremost只能处理具有明确定义的标题的文件,即不能处理纯文本文件,所以我依靠我的好朋友strings.

strings diskimage > diskstrings.txt 生成了一个 3gb 文本文件,其中包含一堆字符串,其中大部分是无用的东西,与我真正想要的文本混合在一起。

大多数垃圾往往是非常长的,不间断的胡言乱语。我感兴趣的东西保证小于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()
Run Code Online (Sandbox Code Playgroud)

这有效,但供将来参考:是否有任何神奇的单行咒语(想想awk, sed)可以按行长度过滤文件?

awk sed filter strings

19
推荐指数
2
解决办法
2万
查看次数

可以改用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
Run Code Online (Sandbox Code Playgroud)

我可以这样做

# nc localhost 9571 | grep rating | cut -d: -f2
94
Run Code Online (Sandbox Code Playgroud)

但可以awk用来代替更简单的解决方案吗?

linux bash grep awk

17
推荐指数
4
解决办法
1864
查看次数

如何解析ini文件并将其转换为bash数组变量?

我正在尝试将 ini 文件转换为 bash 数组变量。示例ini如下:

[foobar]
session=foo
path=/some/path

[barfoo]
session=bar
path=/some/path
Run Code Online (Sandbox Code Playgroud)

所以这些变成:

session[foobar]=foo
path[foobar]=/some/path
session[barfoo]=bar
Run Code Online (Sandbox Code Playgroud)

等等。

现在,我只能想出这个命令

awk -F'=' '{ if ($1 ~ /^\[/) section=$1; else if ($1 !~ /^$/) print $1 section "=" $2 }'
Run Code Online (Sandbox Code Playgroud)

此外,另一个问题是,它没有考虑附近的空间=。我认为sed可能更适合这项工作,但我不知道如何在sed.

那么知道如何做到这一点吗?

scripting configuration bash awk sed

17
推荐指数
2
解决办法
5万
查看次数

iptables 只显示一个链

tldr:我怎样才能让 iptables 只显示一个链?

我可以让 iptables 只显示一个表,但一个表由多个链组成。我需要找到链 INPUT 中的最后一条规则(通常但不总是拒绝所有规则)。

我尝试过 awk 甚至一些 grep,但我在这些方面的技能肯定会减弱。我试过使用 awk 只获取一个段落,但这似乎不适用于输出,iptables --line-numbers -n -L -t filter也许是因为那些空行并不是真正的空白。

我正在寻找可以安装在 CentOS 6 最小环境中的任何普通 gnu 工具的解决方案。

firewall iptables awk

16
推荐指数
1
解决办法
3万
查看次数