Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UNIX中特定字段中值的转换_Unix_Sed_Gsub - Fatal编程技术网

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。这有助于转换特定列中的值。