bash - 如何从 awk 命令获取下一行
问题描述
以下详细信息位于名为 repo 的文件中。
Date: 2010/10/19 19:05:06
Description:
Created by rolandb.
Type: local
我想从 shell 脚本中单独提取详细信息。我有以下代码
#!/bin/bash
Date=`awk -v s="Date" 'index($0, s) == 1' repo`
Description=`awk -v s="Description" 'index($0, s) == 1' repo`
Type=`awk -v s="Type" 'index($0, s) == 1' repo`
echo $Date
echo $Description
echo $Type
它没有捕获描述中的行,因为它在下一行中,输出如下:
Date: 2010/10/19 19:05:06
Description:
Type: local
如何从 shell 脚本中捕获 Description: 下的行?
解决方案
同一文件上有多个小 Awk 脚本强烈表明您应该编写一个更大的 Awk 脚本。
awk '$1 == "Date:" { date = $2 " " $3; next }
$1 == "Description:" { fetch_next = 1; next }
fetch_next { desc = $0; fetch_next = 0; next }
$1 == "Type:" {
print "Date:", date;
print "Description:", desc;
print "Type:", $1 }' repo
这包含有关输入文件组织的多个假设。如果文件可能包含多个这样的记录并且您想全部解析它们,那应该很容易。如果 Type 字段并不总是记录中的最后一行,则需要对逻辑进行一些更改。这两个都是常见的问题;在本网站和其他网站上找到有关如何解决这些问题的现有问题应该不难。
还有一个getline
专门获取下一行的命令;但我发现上述模式(一个或多个变量来跟踪你的状态)更广泛有用。
推荐阅读
- c# - 用 3D 对象的 3-4 个节点(角)放置一个对象(c# unity)
- xml - 是否可以像在代码中一样为单个标签使用多个标签值
- matlab - 测试 varargin 是否存在字符串模式
- python - 代码优化:如何使用 scipy 最小化优化代码?
- networking - 从 VM 执行请求时 NFS 服务器拒绝连接
- javascript - ReactJs:如何逃脱
封闭来自道具的数据渲染
- python - Scrapy 无法抓取链接的 .css 文件
- bash - 这个 bash 字符串操作是如何工作的?
- javascript - 为 JavaScript 客户端生成测试覆盖率
- c++ - GoogleTest:如何返回成功结果?