用unix中的另一个序列替换字符串模式

Ram*_*mar 6 unix awk

我想用TaskID_1从开始的序列替换String ,1001TaskID_1可能在我的输入文件中存在任意多行.同样,我需要TASKID_2用下一个序列值替换输入文件中出现的所有内容1002.

输入文件:

12345|45345|TaskID_1|dksj|kdjfdsjf|12
1245|425345|TaskID_1|dksj|kdjfdsjf|12
1234|25345|TaskID_2|dksj|kdjfdsjf|12
123425|65345|TaskID_2|dksj|kdjfdsjf|12
123425|15325|TaskID_1|dksj|kdjfdsjf|12
11345|55315|TaskID_2|dksj|kdjfdsjf|12
6345|15345|TaskID_3|dksj|kdjfdsjf|12
72345|25345|TaskID_4|dksj|kdjfdsjf|12
9345|411345|TaskID_3|dksj|kdjfdsjf|12
Run Code Online (Sandbox Code Playgroud)

输出文件应如下所示:

12345|45345|1001|dksj|kdjfdsjf|12
1245|425345|1001|dksj|kdjfdsjf|12
1234|25345|1002|dksj|kdjfdsjf|12
123425|65345|1002|dksj|kdjfdsjf|12
123425|15325|1001|dksj|kdjfdsjf|12
11345|55315|1002|dksj|kdjfdsjf|12
6345|15345|1003|dksj|kdjfdsjf|12
72345|25345|1004|dksj|kdjfdsjf|12
9345|411345|1003|dksj|kdjfdsjf|12
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 9

这是使用的一种方式awk:

awk 'BEGIN { FS=OFS="|" } { $3=1000 + NR }1' file
Run Code Online (Sandbox Code Playgroud)

或者不那么冗长:

awk -F '|' '{ $3=1000 + NR }1' OFS='|' file
Run Code Online (Sandbox Code Playgroud)

结果:

12345|45345|1001|dksj|kdjfdsjf|12
1245|425345|1002|dksj|kdjfdsjf|12
1234|25345|1003|dksj|kdjfdsjf|12
123425|65345|1004|dksj|kdjfdsjf|12
123425|15325|1005|dksj|kdjfdsjf|12
11345|55315|1006|dksj|kdjfdsjf|12
6345|15345|1007|dksj|kdjfdsjf|12
72345|25345|1008|dksj|kdjfdsjf|12
9345|411345|1009|dksj|kdjfdsjf|12
Run Code Online (Sandbox Code Playgroud)

对于第一个示例,文件分隔符和输出文件分隔符设置为单个管道符.这是在BEGIN块中设置的,因此它只执行一次,而不是每行输入.然后我们将第三列设置为等于1000加上递增变量.我们可以使用++i这个变量,但我们可以改为使用NR(这是记录号/行号的简称),因此可以避免创建额外变量的需要.在1默认情况下,最终能够打印.一个更详细的解决方案看起来像:

awk 'BEGIN { FS=OFS="|" } { $3=1000 + NR; print }' file
Run Code Online (Sandbox Code Playgroud)

编辑:

使用更新的数据文件,尝试:

awk 'BEGIN { FS=OFS="|" } { sub(/.*_/,"",$3); $3+=1000 }1' file
Run Code Online (Sandbox Code Playgroud)

结果:

12345|45345|1001|dksj|kdjfdsjf|12
1245|425345|1001|dksj|kdjfdsjf|12
1234|25345|1002|dksj|kdjfdsjf|12
123425|65345|1002|dksj|kdjfdsjf|12
123425|15325|1001|dksj|kdjfdsjf|12
11345|55315|1002|dksj|kdjfdsjf|12
6345|15345|1003|dksj|kdjfdsjf|12
72345|25345|1004|dksj|kdjfdsjf|12
9345|411345|1003|dksj|kdjfdsjf|12
Run Code Online (Sandbox Code Playgroud)