我想从文本文件中逐行提取一个子字符串。我需要的信息在特定字段下。例如,我有以下文本:
{name:x, version:1.0, info:"test", ...}
{name:y, version:0.1, info:"test again", ...}
{name:z, version:1.1, info:"test over", ...}
我尝试使用以下命令来提取所有版本:
cut -d',' -f 2 <file name> | cut -d':' -f 2 > <output>
这并不完美。这适用于上面的示例,但如果我有以下条目:
{name:x, info: "test", ..., version:1.2, ...}
上述命令会报告不正确的版本。有什么方法可以根据字段名称而不是按列提取信息?
预期结果:
1.0
0.1
1.1
1.2
最佳答案
使用这个awk
:
awk -v f='version' -F ' *[{}:=,] *| +' '{for (i=2; i<=NF; i++) if ($(i-1)==f)
{print $i; break}}' file
1.0
0.1
1.1
1.2
关于linux - 如何按名称而不是按固定列从类似 JSON 的文本中提取字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25967460/