UNIX-如何在UNIX中交换特定列下的字符
我在一个file.txt中有下面两行。我希望第三列中的最后两位数字从01交换到10,并将两条新记录保存在新文件中。其他列的长度将更改,但第三列的长度将仅保留11位数字。你能帮忙吗UNIX-如何在UNIX中交换特定列下的字符,unix,awk,Unix,Awk,我在一个file.txt中有下面两行。我希望第三列中的最后两位数字从01交换到10,并将两条新记录保存在新文件中。其他列的长度将更改,但第三列的长度将仅保留11位数字。你能帮忙吗 1234567;Kottadi Kannan;12345678901;ABC 7654321;Ram Kumar;98765432201;CBA 下面是一个使用POSIX和substr()用一些硬编码索引“重建”字符串的解决方案(它既不美观也不简洁,但很有效): awk-F';'-v OFS=';' {$3=subs
1234567;Kottadi Kannan;12345678901;ABC
7654321;Ram Kumar;98765432201;CBA
下面是一个使用POSIX和
substr()
用一些硬编码索引“重建”字符串的解决方案(它既不美观也不简洁,但很有效):
awk-F';'-v OFS=';'
{$3=substr($3,1,9)substr($3,11,1)substr($3,10,1);print}
'file.txt>newfile.txt
但是,如果该值始终是一个整数,并且它应该始终从..01
更改为..10
,那么它可以变得简单得多:
awk-F';'-v OFS=';'{$3+=9;print}'file.txt>newfile.txt
使用sed:
sed -ri 's/(^.*;)(.*;)(.*)([[:digit:]])([[:digit:]])(;.*$)/\1\2\3\5\4\6/' file
使用-E或-r启用正则表达式解释,然后将行拆分为带括号的6个部分。在切换第4节和第5节以及第6节之前,用第1到第3节替换该行。是的,它始终是整数,最后两位数字应从01更改为10。成功了。非常感谢,但我会将所有匹配项合并到2位数之前,如:
*;*;**代码>,并替换为\1
,这将导致更清晰的匹配和更简单的替换字符串。