重来,提取出initcal 开关的行,并按after 后面的时间大小重新对文本排序,并在行首添加after后面的时间
时间: 2024-03-27 18:41:11 浏览: 55
可以使用以下命令来提取出包含 `initcall` 关键字的行,并按照 `after` 后面的时间大小进行排序,并在每行行首添加 `after` 后面的时间:
```bash
grep "initcall" file.txt | awk '{match($0, /after ([0-9]+) usecs/); print substr($0, RSTART + 6, RLENGTH - 12), $0}' | sort -n | awk '{print $1, substr($0, index($0, $2))}'
```
其中,`file.txt` 需要替换为实际的文件名。
该命令的具体解释如下:
- `grep "initcall" file.txt`:使用 grep 命令提取出包含 `initcall` 关键字的行;
- `awk '{match($0, /after ([0-9]+) usecs/); print substr($0, RSTART + 6, RLENGTH - 12), $0}'`:使用 awk 命令通过正则表达式匹配 `after` 后面的时间,并将其和整行文本一起输出。其中,`match($0, /after ([0-9]+) usecs/)` 表示在当前行中查找 `after` 后面的时间,并将其匹配结果保存到内置变量 `RSTART` 和 `RLENGTH` 中;`substr($0, RSTART + 6, RLENGTH - 12)` 表示从当前行中截取 `after` 后面的时间的字符串;
- `sort -n`:使用 sort 命令对提取出的时间进行排序,按照数字大小进行升序排列;
- `awk '{print $1, substr($0, index($0, $2))}'`:使用 awk 命令将 `after` 后面的时间和整行文本的顺序调换,并在行首添加时间。其中,`index($0, $2)` 表示查找整行文本中第二个字段(即包含 `initcall` 的那部分文本)的位置,然后使用 `substr()` 函数截取该位置之后的所有文本。
执行命令后,输出结果将会按照 `after` 后面的时间大小重新排序,并在每行行首添加 `after` 后面的时间。
阅读全文