重来,提取出initcal 开关的行,并删掉所有的方括号及里面的内容,并按after 后面的时间大小重新对文本降序排序,并在行首添加after后面的时间
时间: 2024-03-27 14:41:13 浏览: 50
可以使用以下命令来提取出包含 `initcall` 关键字的行,删除所有的方括号及里面的内容,并按照 `after` 后面的时间大小进行降序排序,并在每行行首添加 `after` 后面的时间:
```bash
grep "initcall" file.txt | sed -E 's/\[[^]]+\] //' | awk '{match($0, /after ([0-9]+) usecs/); print substr($0, RSTART + 6, RLENGTH - 12), $0}' | sort -nr | awk '{print $1, substr($0, index($0, $2))}'
```
其中,`file.txt` 需要替换为实际的文件名。
该命令与之前的命令类似,只是在最后一个 sort 命令中加入了 `-r` 参数,表示按照数字大小进行降序排列。
执行命令后,输出结果将会按照 `after` 后面的时间大小重新排序(降序),并在每行行首添加 `after` 后面的时间,同时删除了每行文本中的所有方括号及里面的内容。
相关问题
重来,提取出initcal 开关的行,并删掉所有的方括号及里面的内容,并按after 后面的时间大小重新对文本排序,并在行首添加after后面的时间
可以使用以下命令来提取出包含 `initcall` 关键字的行,删掉所有的方括号及里面的内容,并按照 `after` 后面的时间大小进行排序,并在每行行首添加 `after` 后面的时间:
```bash
grep "initcall" file.txt | sed -E 's/\[[^]]+\] //' | 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` 关键字的行;
- `sed -E 's/\[[^]]+\] //'`:使用 sed 命令删除每行文本中所有的方括号及里面的内容;
- `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` 后面的时间,同时删除了每行文本中的所有方括号及里面的内容。
重来,提取出initcal 开关的行,并按after 后面的时间大小重新对文本排序,
可以使用以下命令来提取出包含 `initcall` 关键字的行,并按照 `after` 后面的时间大小进行排序:
```bash
grep "initcall" file.txt | awk '{print $(NF-1), $0}' | sort -n | cut -d' ' -f2-
```
其中,`file.txt` 需要替换为实际的文件名。
该命令的具体解释如下:
- `grep "initcall" file.txt`:使用 grep 命令提取出包含 `initcall` 关键字的行;
- `awk '{print $(NF-1), $0}'`:使用 awk 命令将每行文本中 `after` 后面的时间提取出来,并将其和整行文本一起输出。`$(NF-1)` 表示取最后一个字段的前一个字段,也就是 `after` 后面的时间;
- `sort -n`:使用 sort 命令对提取出的时间进行排序,按照数字大小进行升序排列;
- `cut -d' ' -f2-`:使用 cut 命令将每行文本的第一个字段(即 `after` 后面的时间)去掉,只输出整行文本。`-d' '` 表示使用空格作为字段分隔符,`-f2-` 表示从第二个字段开始输出,直到最后一个字段。
执行命令后,输出结果将会按照 `after` 后面的时间大小重新排序,并只输出包含 `initcall` 关键字的行。
阅读全文