【问题标题】:prefixing each N occurrences but from a specific numeral prefix为每 N 次出现添加前缀,但来自特定的数字前缀
【发布时间】:2022-01-05 19:38:42
【问题描述】:

我的源文件:

0.txt:

[dog$#@.txt ;`ffxx00`]
[dog$#@.txt ;`ffxx00`]
[dog$#@.txt ;`ffxx00`]
[dog$#@.txt ;`ffxx00`]
[dog$#@.txt ;`ffxx00`]
[dog$#@.txt ;`ffxx00`]

我有以下命令使用每 2 个 .txt 计数为数字添加前缀:

$ awk -v n=2 '{ newline=""; while ( x=index($0,".txt")) { if(cnt%n==0) pfx++; newline=newline substr($0,1,x-1) pfx substr($0,x,3) ; $0=substr($0,x+3); cnt++} print newline $0}' 0.txt 

[dog$#@1.txt ;`ffxx00`]
[dog$#@1.txt ;`ffxx00`]
[dog$#@2.txt ;`ffxx00`]
[dog$#@3.txt ;`ffxx00`]
[dog$#@3.txt ;`ffxx00`]
[dog$#@3.txt ;`ffxx00`]

但我想从特定的数字前缀开始计数,例如 3 这样我的结果是这样的:

[dog$#@3.txt ;`ffxx00`]
[dog$#@3.txt ;`ffxx00`]
[dog$#@4.txt ;`ffxx00`]
[dog$#@4.txt ;`ffxx00`]
[dog$#@5.txt ;`ffxx00`]
[dog$#@5.txt ;`ffxx00`]

【问题讨论】:

  • index 中的$ 修复为$0 并以awk -v pfx=2 -v n=2 ... 启动awk,一切就绪。
  • @JamesBrown 抱歉,在尝试寻找解决方案时,我不想0 删除了index($0,。我已经了解pfx++ 的用法,但我没有注意我可以用它做什么,
  • @JamesBrown 好的,我按照我说的做了,这正是我需要的,所以现在它可以正常工作了。

标签: awk count suffix


【解决方案1】:

给定:

printf ".txt%.0s\n" {1..6} >0.txt # makes your example...

你可以试试:

awk -v n=2 -v start=3 '
/^\.txt$/{  print start $O
            if (++cnt%n==0) start++
}
' 0.txt

打印:

3.txt
3.txt
4.txt
4.txt
5.txt
5.txt

通过更新(grrr),这将输出所需的输出和输入:

awk -v n=2 -v start=3 '
/\.txt /{
replacement=start ".txt "
sub(/\.txt /, replacement, $0)
if(++cnt%n==0) start++
} 1
' 0.txt

打印:

[dog$#@3.txt ;`ffxx00`]
[dog$#@3.txt ;`ffxx00`]
[dog$#@4.txt ;`ffxx00`]
[dog$#@4.txt ;`ffxx00`]
[dog$#@5.txt ;`ffxx00`]
[dog$#@5.txt ;`ffxx00`]

【讨论】:

  • 感谢您的帮助,但我的问题对0.txt 使用了简单的内容,我真正需要的是.txt 在其他字符串中的情况,我认为您应该使用/.*\.txt/ 忽略之前的任何内容搜索模式,但我已经尝试过了,但它不起作用
  • 那请举个更真实的例子!
  • 我是更新问题。
  • 我的真实案例涉及包含大量数据和数千个不同符号的文件,但用户 JamesBrown 评论解决方案适用于这些大文件。现在再次尝试您的最后一次更新,我没有预期的退出。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2016-03-07
  • 2011-11-28
相关资源
最近更新 更多