用unix中的另一个序列替换字符串模式
发布时间:2020-12-16 01:26:21 所属栏目:安全 来源:网络整理
导读:我想用从1001开始的序列替换String TaskID_1,这个TaskID_1可以在我的输入文件中存在任意多行. 类似地,我需要用下一个序列值1002替换输入文件中出现的所有TASKID_2. 输入文件: 12345|45345|TaskID_1|dksj|kdjfdsjf|121245|425345|TaskID_1|dksj|kdjfdsjf|121
我想用从1001开始的序列替换String TaskID_1,这个TaskID_1可以在我的输入文件中存在任意多行.
类似地,我需要用下一个序列值1002替换输入文件中出现的所有TASKID_2. 输入文件: 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 输出文件应如下所示: 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
这是使用awk的一种方式:
awk 'BEGIN { FS=OFS="|" } { $3=1000 + NR }1' file 或者不那么冗长: awk -F '|' '{ $3=1000 + NR }1' OFS='|' file 结果: 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 对于第一个示例,文件分隔符和输出文件分隔符设置为单个管道符.这是在BEGIN块中设置的,因此它只执行一次,而不是每行输入.然后我们将第三列设置为等于1000加上递增变量.我们可以使用i作为这个变量,但我们可以使用NR(它是记录号/行号的缩写),因此可以避免创建额外变量的需要.最后的1允许默认打印.一个更详细的解决方案看起来像: awk 'BEGIN { FS=OFS="|" } { $3=1000 + NR; print }' file 编辑: 使用更新的数据文件,尝试: awk 'BEGIN { FS=OFS="|" } { sub(/.*_/,"",$3); $3+=1000 }1' file 结果: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |