在下一行中使用awk将版本号增加1
我需要使用awk在一个唯一字符串后的行中将版本号增加1 原件:在下一行中使用awk将版本号增加1,awk,Awk,我需要使用awk在一个唯一字符串后的行中将版本号增加1 原件: <key>UniqueKey</key> <string>100</string> UniqueKey 100 期望输出 <key>UniqueKey</key> <string>101</string> UniqueKey 101 不幸的是,“字符串”在文件中不是唯一的,所以我必须修改唯一的“key”字符串后面的行。我需要把这个
<key>UniqueKey</key>
<string>100</string>
UniqueKey
100
期望输出
<key>UniqueKey</key>
<string>101</string>
UniqueKey
101
不幸的是,“字符串”在文件中不是唯一的,所以我必须修改唯一的“key”字符串后面的行。我需要把这个数字,不管它是什么,增加一个。该命令将在每次删除的虚拟工作区中运行,因此最好使用简单的awk命令。$awk-F'[]'''''$3==“UniqueKey”{n=NR}
$ awk -F'[<>]' '$3=="UniqueKey"{n=NR}
n && NR==n+1 && $2=="string"{sub($3,$3+1)}1' file
<key>UniqueKey</key>
<string>101</string>
n&&NR==n+1&&2==“string”{sub($3,$3+1)}1”文件
唯一键
101
$awk-F'[]'$3==“UniqueKey”{n=NR}
n&&NR==n+1&&2==“string”{sub($3,$3+1)}1”文件
唯一键
101
这看起来非常像一个XML文件。强烈建议对此作业使用与XML相关的工具,如xmlstarlet
假设表单的给定输入文件:
<header>
<node>
<key>UniqueKey</key>
<foo />
<string>100</string>
</node>
<node>
<key>UniqueKey</key>
<string>101</string>
<string>200</string>
</node>
</header>
这样做的目的如下:
:进入编辑模式ed
:更新由-u
xpath匹配的节点
:选择名为//键
键
:选择名称为//key[text()=“UniqueKey”]
且值为key
的任何节点“UniqueKey”
:选择//key[text()=“UniqueKey”]/following sibling::string
之后的key
的第一个“string”同级key
:通过表达式-x'(text()+1)
text()+1
<?xml version="1.0"?>
<header>
<node>
<key>UniqueKey</key>
<foo/>
<string>101</string> # change
</node>
<node>
<key>UniqueKey</key>
<string>102</string> # change
<string>200</string> # no change
</node>
</header>
这看起来非常像一个XML文件。强烈建议对此作业使用与XML相关的工具,如
xmlstarlet
假设表单的给定输入文件:
<header>
<node>
<key>UniqueKey</key>
<foo />
<string>100</string>
</node>
<node>
<key>UniqueKey</key>
<string>101</string>
<string>200</string>
</node>
</header>
这样做的目的如下:
:进入编辑模式ed
:更新由-u
xpath匹配的节点
:选择名为//键
键
:选择名称为//key[text()=“UniqueKey”]
且值为key
的任何节点“UniqueKey”
:选择//key[text()=“UniqueKey”]/following sibling::string
之后的key
的第一个“string”同级key
:通过表达式-x'(text()+1)
text()+1
<?xml version="1.0"?>
<header>
<node>
<key>UniqueKey</key>
<foo/>
<string>101</string> # change
</node>
<node>
<key>UniqueKey</key>
<string>102</string> # change
<string>200</string> # no change
</node>
</header>
$awk-F'[]'''$2==“string”&&p3==“UniqueKey”{sub(/>[^$awk-F'[]''][''''$2==“string”&&p3==“UniqueKey”{sub(/>[^)虽然这个答案可能是正确和有用的,但最好在回答的同时包含一些解释,以解释它如何帮助解决问题。如果将来有变化,这将变得特别有用(可能无关)这会导致它停止工作,用户需要了解它曾经是如何工作的。你错了。任何人只要简单浏览一下谷歌和/或一个手册页就可以找到的琐碎解决方案最好保持原样,因为人们从中学到的远不止一个脚本是如何工作的。嗨,埃德。显然你比我有更多的因果报应,所以我要反驳r、 我只在代码答案上保留此选项,以鼓励更丰富的答案。对于我们这些有经验的人来说,琐碎的东西对于刚起步的人来说可能并不琐碎:)不要只对你不懂的代码答案发表评论,这会把网站弄得一团糟,浪费人们的时间。当工具看到只懂代码的答案时,它会标记出可能的低质量答案,这是一种有严重缺陷的方法,由懂代码的人来决定答案是否低质量——没有什么根本的问题“仅代码”答案和“仅代码”答案的错误并不意味着质量低。虽然此答案可能是正确和有用的,但如果您在答案中包含一些解释,以解释它如何帮助解决问题,则建议您使用此答案。如果将来发生更改(可能不相关),此选项将特别有用这会导致它停止工作,用户需要了解它曾经是如何工作的。你错了。任何人只要简单浏览一下谷歌和/或一个手册页就可以找到的琐碎解决方案最好保持原样,因为人们从中学到的远不止一个脚本是如何工作的。嗨,埃德。显然你比我有更多的因果报应,所以我要反驳r、 我只在代码答案上保留此选项,以鼓励更丰富的答案。对于我们这些有经验的人来说,琐碎的东西对于刚起步的人来说可能并不琐碎:)不要只对你不懂的代码答案发表评论,这会把网站弄得一团糟,浪费人们的时间。当工具看到只懂代码的答案时,它会标记出可能的低质量答案,这是一种有严重缺陷的方法,由懂代码的人来决定答案是否低质量——没有什么根本的问题仅代码答案和仅代码的错误并不意味着低质量。
$ awk -F'[<>]' '$2=="string" && p3=="UniqueKey" { sub(/>[^<]+/,">"$3+1) } {p3=$3} 1' file
<key>UniqueKey</key>
<string>101</string>