UNIX中特定字段中值的转换
文件中存在以下值UNIX中特定字段中值的转换,unix,sed,gsub,Unix,Sed,Gsub,文件中存在以下值 A|0001|.00|xyz|.00 B|0002|1.00|xyz|.00 C|0003|12.43|xyz|.00 我希望输出文件中的值为 A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|0003|12.43|xyz|0.00 如何实现这一点?通过perl $ perl -pe 's/\B(?=\.)/0/g' file A|0001|0.00|xyz|0.00 B|0002|1.00|xyz|0.00 C|000
A|0001|.00|xyz|.00
B|0002|1.00|xyz|.00
C|0003|12.43|xyz|.00
我希望输出文件中的值为
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
如何实现这一点?通过perl
$ perl -pe 's/\B(?=\.)/0/g' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
通过sed
$ sed -r 's/\|\./|0./g' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
通过perl
$ perl -pe 's/\B(?=\.)/0/g' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
通过sed
$ sed -r 's/\|\./|0./g' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
假设您希望对这些列中的数字进行规范化,使其始终具有完整的部分和两个有效数字,这应该满足您的要求:
awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file
$ cat file
A|0001|.00|xyz|.00
B|0002|1.00|xyz|.00
C|0003|12.43|xyz|.00
D|0004|.54|xyz|1
$ awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
D|0004|0.54|xyz|1.00
假设您希望对这些列中的数字进行规范化,使其始终具有完整的部分和两个有效数字,这应该满足您的要求:
awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file
$ cat file
A|0001|.00|xyz|.00
B|0002|1.00|xyz|.00
C|0003|12.43|xyz|.00
D|0004|.54|xyz|1
$ awk -v FS=\| -v OFS=\| '{$3=sprintf("%.2f", $3); $5=sprintf("%.2f", $5)}7' file
A|0001|0.00|xyz|0.00
B|0002|1.00|xyz|0.00
C|0003|12.43|xyz|0.00
D|0004|0.54|xyz|1.00
这是另一个awk
这是另一个awk
谢谢你,伊坦。这有助于转换特定列中的值。谢谢Etan。这有助于转换特定列中的值。