awk sub ++每 4 场比赛计数与每 1 场比赛不同
awk sub ++count every 4 matches unlike every 1 match
假设我有以下 1.txt
文件:
one file.txt
two file.txt
three file.txt
four file.txt
five file.txt
sixt file.txt
seven file.txt
eight file.txt
nine file.txt
我通常使用下面的命令依次重命名1.txt
处列出的文件:
awk '/\.txt/{sub(".txt",++count"&")} 1' 1.txt > 2.txt
输出为2.txt
:
one file1.txt
two file2.txt
three file3.txt
four file4.txt
five file5.txt
sixt file6.txt
seven file7.txt
eight file8.txt
nine file9.txt
但是当模式为 .txt
.
时,我只想每 4 个匹配重命名一次
澄清一下,伪代码类似于:
awk '/\.txt/{sub(".txt",++count"&")} 1 | <change every 4 matches> ' 1.txt > 3.txt
使得3.txt
如下:
one file.txt
two file.txt
three file.txt
four file1.txt <-here
five file.txt
sixt file.txt
seven file.txt
eight file2.txt <- here
nine file.txt
我一直在寻找网络和我的学习,但我不记得类似的东西,我很难开始做一些事情来实现这个结果。
注意:也许我只需要继续下面的命令:
awk -v n=0 '/\.txt/{if (n++==4) sub(".txt",++count"&")} 1'
你快到了。你能试试吗:
awk '/\.txt/ {if (++n%4==0) sub(".txt",++count"&")} 1' 1.txt > 2.txt
条件++n%4==0
满足每四行有效。
在此处添加 1 个 awk
变体,仅基于您显示的示例。简单的解释是,检查 line 是否为 NOT NULL AND count 变量值是否为 4,然后将 .txt 替换为 count1(每次增加 1)与 .txt 本身并打印该行。
awk 'NF && ++count==4{sub(/\.txt/,++count1"&");count=0} 1' 1.txt > 2.txt
另一个选项可能是传递 n=4
以将其用于模数和除法。
对于字符串,您可以将 s=".txt"
传递给 index() 以检查它是否存在,并让 sub 用于替换。
awk -v str=".txt" -v nr=4 'index([=10=],str){if(!(++i%nr)) sub(str,i/nr"&")}1' 1.txt > 2.txt
假设我有以下 1.txt
文件:
one file.txt
two file.txt
three file.txt
four file.txt
five file.txt
sixt file.txt
seven file.txt
eight file.txt
nine file.txt
我通常使用下面的命令依次重命名1.txt
处列出的文件:
awk '/\.txt/{sub(".txt",++count"&")} 1' 1.txt > 2.txt
输出为2.txt
:
one file1.txt
two file2.txt
three file3.txt
four file4.txt
five file5.txt
sixt file6.txt
seven file7.txt
eight file8.txt
nine file9.txt
但是当模式为 .txt
.
澄清一下,伪代码类似于:
awk '/\.txt/{sub(".txt",++count"&")} 1 | <change every 4 matches> ' 1.txt > 3.txt
使得3.txt
如下:
one file.txt
two file.txt
three file.txt
four file1.txt <-here
five file.txt
sixt file.txt
seven file.txt
eight file2.txt <- here
nine file.txt
我一直在寻找网络和我的学习,但我不记得类似的东西,我很难开始做一些事情来实现这个结果。
注意:也许我只需要继续下面的命令:
awk -v n=0 '/\.txt/{if (n++==4) sub(".txt",++count"&")} 1'
你快到了。你能试试吗:
awk '/\.txt/ {if (++n%4==0) sub(".txt",++count"&")} 1' 1.txt > 2.txt
条件++n%4==0
满足每四行有效。
在此处添加 1 个 awk
变体,仅基于您显示的示例。简单的解释是,检查 line 是否为 NOT NULL AND count 变量值是否为 4,然后将 .txt 替换为 count1(每次增加 1)与 .txt 本身并打印该行。
awk 'NF && ++count==4{sub(/\.txt/,++count1"&");count=0} 1' 1.txt > 2.txt
另一个选项可能是传递 n=4
以将其用于模数和除法。
对于字符串,您可以将 s=".txt"
传递给 index() 以检查它是否存在,并让 sub 用于替换。
awk -v str=".txt" -v nr=4 'index([=10=],str){if(!(++i%nr)) sub(str,i/nr"&")}1' 1.txt > 2.txt