要捕获特定模式,awk并且grep可以使用。为什么我们应该使用一个?哪个更快,为什么?
如果我有一个日志文件并且我想获取某个模式,我可以执行以下操作之一
awk '/pattern/' /var/log/messages
Run Code Online (Sandbox Code Playgroud)
或者
grep 'pattern' /var/log/messages
Run Code Online (Sandbox Code Playgroud)
我没有做过任何基准测试,所以我不知道。有人可以详细说明吗?很高兴了解这两个工具的内部工作原理。
这有点奇怪。我正在尝试使用以下命令扫描 iSCSI 设备:
echo 1 > /sys/block/sda/device/rescan >/dev/null 2>&1
# Doesn't work. The rescan won't recognize the new available disk space.
echo 1 > /sys/block/sda/device/rescan
# Works: recognizes the new available disk space.
Run Code Online (Sandbox Code Playgroud)
我如何将所有标准输出和标准错误发送到/dev/null,因为我不希望我的屏幕变得凌乱?
我有以下代码,我正在运行它来提取一些 IP 地址并计算它们的唯一性。例如
./my_program | awk '/^10./{a[$1 FS $2]++ } END { for(i in a) print i,a[i]}' > some_file
Run Code Online (Sandbox Code Playgroud)
some_file包含的输出是这样的:
10.12.33.14 34
10.12.33.11 12
10.12.33.16 5
Run Code Online (Sandbox Code Playgroud)
现在我想要的是运行{system("dig +short -x " i)}并将输出追加到最后一列,以便文件看起来像
10.12.33.14 34 server1.rdns.domain.tld
10.12.33.11 12 server2.rdns.domain.tld
10.12.33.16 5 server3.rdns.domain.tld
Run Code Online (Sandbox Code Playgroud)
我可以一次性完成此操作,然后将输出通过管道传输到文本文件吗?
谢谢!
更新1
... END { for(i in a) cmd=sprintf("dig +short -x \"%s\"", $i); cmd | getline type; close(cmd); printf("%s %s %s\n",i,a[i],type);
Run Code Online (Sandbox Code Playgroud)
这就是输出(stderr)的结尾
dig: '.in-addr.arpa.' is not a legal name (unexpected end of input)
Run Code Online (Sandbox Code Playgroud)
这是我在文件中看到的
10.12.33.14 34 …Run Code Online (Sandbox Code Playgroud) 试图在 find 周围使用包装器,但遇到以下问题。例如,我想提供一些目录作为参数,但最后一个参数始终是一个数字,指示应删除多旧数据。例如:
rmoldfiles dir1 dir2 dir3 20
Run Code Online (Sandbox Code Playgroud)
这应该删除超过 30 天的旧文件 looking at mtime of course
这是脚本:
#!/bin/bash
die()
{
echo >&2 "$@"
exit 1
}
usage()
{
echo >&2 "Usage: $0 [dir1 dir2 dir3] [days old]"
die
}
if [[ (($# < 1)) || -f "$1" ]]; then
if [[ -f "$1" ]]; then
printf '%s\n' "Please provide a directory"
fi
usage
fi
while (( $# )); do
while IFS= read -r -d $'\0' file; do
printf 'rm %s\n' …Run Code Online (Sandbox Code Playgroud) 我有一个输入文件如下
hello: hello12
foo: bar14
test3: pppp
more: stuff
test14: bla
Run Code Online (Sandbox Code Playgroud)
有没有办法使用第一列作为标题并用逗号分隔它,如下所示:
hello,foo,test3,more,test14
hello12,bar14,pppp,stuff,bla
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法但没有成功。