gpt4 book ai didi

linux - 脚本 : add (upcounting) number value between matching strings

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:23 25 4
gpt4 key购买 nike

我有超过 100 个文件,其中包含超过 9000 行文本。其中一个文件的预览摘录如下所示:

<productname>kidscar1</productname>
<productid>98</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>101</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>104</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>103</productid>

我正在尝试从不同的产品 ID 开始更改(重新排列)产品 ID,并自动将其计入包含产品 ID 的下一行。

我在考虑可以在 for 循环中使用的 shell 脚本解决方案。

**sh idscript.sh oldfile.txt 1000 productid > newfile.txt**

结果:

<productname>kidscar1</productname>
<productid>1000</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>1001</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>1002</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>1003</productid>`

我知道可以用下一个命令替换 sed 中的整行:

**sed "s/<productid>100</productid>=.*/<productid>=<productid>1000</productid>/g"**

但是我怎样才能使这项工作获得上述结果呢?如果还有其他(更简单的)方法可以实现这一点,我也很想听听!

最佳答案

sed 用于 s/old/new,仅此而已。在这种情况下,您需要一个数字变量来跟踪递增的乘积,而 sed 根本不支持变量,因此只需使用 awk:

$ awk -v pid=1000 '/<productid>/{sub(/[0-9]+/,pid++)}1' file
<productname>kidscar1</productname>
<productid>1000</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>1001</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>1002</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>1003</productid>

关于linux - 脚本 : add (upcounting) number value between matching strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47774356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com