使用awk解析可变长度
我不能完全理解这一点。我需要分析第9行上或之后的一行或多行,不包括使用awk解析可变长度,awk,Awk,我不能完全理解这一点。我需要分析第9行上或之后的一行或多行,不包括“或, 因此,如果输出为: { "hash" : "000000000fe549a89848c76070d4132872cfb6efe5315d01d7ef77e4900f2d39", "confirmations" : 88029, "size" : 189, "height" : 227252, "version" : 2, "merkleroot" : "c738fb8e227
“
或,
因此,如果输出为:
{
"hash" : "000000000fe549a89848c76070d4132872cfb6efe5315d01d7ef77e4900f2d39",
"confirmations" : 88029,
"size" : 189,
"height" : 227252,
"version" : 2,
"merkleroot" : "c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"tx" : [
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a"
],
"time" : 1398824312,
"nonce" : 1883462912,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "000000000000000000000000000000000000000000000000083ada4a4009841a",
"previousblockhash" : "00000000c7f4990e6ebf71ad7e21a47131dfeb22c759505b3998d7a814c011df",
"nextblockhash" : "00000000afe1928529ac766f1237657819a11cfcc8ca6d67f119e868ed5b6188"
}
{
"hash" : "000000000fe549a89848c76070d4132872cfb6efe5315d01d7ef77e4900f2d39",
"confirmations" : 88029,
"size" : 189,
"height" : 227252,
"version" : 2,
"merkleroot" : "c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"tx" : [
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a"
],
"time" : 1398824312,
"nonce" : 1883462912,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "000000000000000000000000000000000000000000000000083ada4a4009841a",
"previousblockhash" : "00000000c7f4990e6ebf71ad7e21a47131dfeb22c759505b3998d7a814c011df",
"nextblockhash" : "00000000afe1928529ac766f1237657819a11cfcc8ca6d67f119e868ed5b6188"
}
我想要C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A
或者如果输出为:
{
"hash" : "000000000fe549a89848c76070d4132872cfb6efe5315d01d7ef77e4900f2d39",
"confirmations" : 88029,
"size" : 189,
"height" : 227252,
"version" : 2,
"merkleroot" : "c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"tx" : [
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a"
],
"time" : 1398824312,
"nonce" : 1883462912,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "000000000000000000000000000000000000000000000000083ada4a4009841a",
"previousblockhash" : "00000000c7f4990e6ebf71ad7e21a47131dfeb22c759505b3998d7a814c011df",
"nextblockhash" : "00000000afe1928529ac766f1237657819a11cfcc8ca6d67f119e868ed5b6188"
}
{
"hash" : "000000000fe549a89848c76070d4132872cfb6efe5315d01d7ef77e4900f2d39",
"confirmations" : 88029,
"size" : 189,
"height" : 227252,
"version" : 2,
"merkleroot" : "c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"tx" : [
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a",
"c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a"
],
"time" : 1398824312,
"nonce" : 1883462912,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "000000000000000000000000000000000000000000000000083ada4a4009841a",
"previousblockhash" : "00000000c7f4990e6ebf71ad7e21a47131dfeb22c759505b3998d7a814c011df",
"nextblockhash" : "00000000afe1928529ac766f1237657819a11cfcc8ca6d67f119e868ed5b6188"
}
我想要C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A
C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A
C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A
数字将始终至少出现在第9行,但可能远远超出第9行
注意,为了清晰起见,我使用了哈希C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A
。哈希每次都是唯一的(但长度始终相同)
我更喜欢实际awk的答案。别傻了。没有Perl。这个问题对您来说很复杂,因为您使用了错误的工具
awk
无法解析json,请使用jq
进行解析:
jq -r .tx[] input.json
这个问题对你来说很复杂,因为你使用了错误的工具
awk
无法解析json,请使用jq
进行解析:
jq -r .tx[] input.json
以上仅是以下各项的实施:
awk '/end/{f=0} f{print} /start/{f=1}'
常见的awk习语
以上仅是以下各项的实施:
awk '/end/{f=0} f{print} /start/{f=1}'
常见的awk习惯用法。另一种基于输入格式的
awk
$ awk -F' +: +' 'NF!=1{p=0} p&&!/]/{gsub(/"|,/,""); print} $1~/"tx"/{p=1}' json
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
对于另一个输入
$ awk ... json2
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
另一个基于输入格式的
awk
$ awk -F' +: +' 'NF!=1{p=0} p&&!/]/{gsub(/"|,/,""); print} $1~/"tx"/{p=1}' json
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
对于另一个输入
$ awk ... json2
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
c738fb8e22750b6d3511ed0049a96558b0bc57046f3f77771ec825b22d6a6f4a
你已经试过什么了?@Dietermemken除了大量的搜索外,什么都没有
我不能完全理解这一点。
你说的是“第9行”,但看起来你实际上只是想要tx
字段的值。“是吗?”埃德默顿说得对。你已经试过什么了?“迪特尔梅肯除了大量的搜索外什么都没有我不能完全理解这一点。
你说的是“第9行”,但看起来你实际上只是想要tx
字段的值。是吗?@EdMorton说得对。这会返回什么?它会输出你想要的东西。.tx
的成员们,我可以像awk一样把东西导入jq吗a.sh | jq-r.tx[]
?是的,为什么不尝试它呢?它返回的确切含义是什么?它确实输出您想要的内容。.tx
的成员们,我可以像awk一样把东西导入jq吗a.sh | jq-r.tx[]
?是的,为什么不试试呢?如果可以的话,我会+1。反直觉(对我来说)。如果你有任何问题,请随时提问。我相信如果右方括号(闭合数组)与数据在同一行上,这将失败。这将是有效的JSON,但会导致inTx
在数组有效关闭后保持在1
。是的,如果输入与OP发布的内容不同,则需要不同的脚本来解析它。我假设OP有一个严格的格式,这就是为什么他在寻找awk而不是jq或类似的解决方案。请注意,OP在他的问题或任何评论中都没有提到JSON——他只是显示了一块需要解析的文本。如果可以的话,将+1。反直觉(对我来说)。如果你有任何问题,请随时提问。我相信如果右方括号(闭合数组)与数据在同一行上,这将失败。这将是有效的JSON,但会导致inTx
在数组有效关闭后保持在1
。是的,如果输入与OP发布的内容不同,则需要不同的脚本来解析它。我假设OP有一个严格的格式,这就是为什么他在寻找awk而不是jq或类似的解决方案。请注意,OP在他的问题或任何评论中都没有提到JSON——他只是展示了一块需要解析的文本。