linux - awk, sed, grep Linux 文件中的特定字符串
问题描述
这是我要过滤的完整文件的一部分:
Hashmode: 13761 - VeraCrypt PBKDF2-HMAC-SHA256 + XTS 512 bit + boot-mode (Iterations: 200000)
Speed.#2.........: 2038 H/s (56.41ms) @ Accel:128 Loops:32 Thr:256 Vec:1
Speed.#3.........: 2149 H/s (53.51ms) @ Accel:128 Loops:32 Thr:256 Vec:1
Speed.#*.........: 4187 H/s
目的是打印以下内容:
13761 VeraCrypt PBKDF2-HMAC-SHA256 4187 H/s
这是我尝试过的。完整的文件称为 complete.txt
cat complete.txt | grep Hashmode | awk '{print $2,$4,$5}' > mode.txt
输出:
13761 VeraCrypt PBKDF2-HMAC-SHA256
然后:
cat complete.txt | grep Speed.# | awk '{print $2,$3}' > speed.txt
输出:
4187 H/s
然后:
paste mode.txt speed.txt
问题是线条不匹配。文件“complete.txt”中有大约 200 种模式可供过滤
我也有一种感觉,这可以使用更简单的命令sed
或 awk 来完成。
解决方案
我猜你正在寻找类似以下的东西。
awk '/Hashmode:/ { if(label) print label, speed; label = $2 " " $4 " " $5 }
/Speed\.#/ { speed = $2 " " $ 3 }
END { if (label) print label, speed }' complete.txt
我们将该Hashmode
行与后面的最后 Speed.#
一行匹配,然后在我们看到新的 Hashmode 或到达文件末尾时打印。(未能打印最后一个是常见的初学者错误。)
推荐阅读
- javascript - 我的 javascript 阻止我的代码工作
- bash - 如何在登录后 5 秒自动退出 ssh?
- c# - YouTube Data V3 API 无法识别用于重定向 uri 的 localhost url,为什么?
- swift - Swift 4 领域 Swift 对象
- android - TextView 不会将点击传递给父级
- android - 如何在 Android Studio 3.2 Preview Canary 18 中创建新的 android 项目?
- python - Python3中元组的不变性
- javascript - 从对象渲染 React 组件
- symfony - Symfony 3:在实体 ORM 表前缀中使用 parameters.yml 中的参数
- javascript - 有没有办法通过 vscode 将代码注入网站