我正在编写一个shell脚本,下面是我想要实现的目标。
我有一个文件 - data.txt
data.txt包含, -
TMN -23.50
JHS 5000.00
NHG 233768.90
我想将data.txt合并到datanew.txt,如下所示, -
020TMN+000023.5000
020JHS+005000.0000
020NHG+233768.9000
以下.awk脚本在SunOS 5.8服务器中正常工作
$ cat awkp.awk
( printf "020%s%+06.4f \n",$1,$2)
然后在我的主脚本中调用awkp.awk
cat data.txt | awk -f awkp.awk > datanew.dat
但是在Linux 2.6.18中也不行。
我尝试在不同的shell环境中运行我的shell脚本,就像bash,korn和cshell一样,但没有运气。
我是如何在Linux中获得此输出的?
答案 0 :(得分:1)
这适用于linux:
$ awk '{printf "020%s%+012.4f \n",$1,$2}' data.txt
020TMN-000023.5000
020JHS+005000.0000
020NHG+233768.9000
或者,如果您更喜欢单独文件中的awk程序:
$ cat awkp3.awk
{printf "020%s%+012.4f \n",$1,$2}
$ awk -f awkp3.awk data.txt
020TMN-000023.5000
020JHS+005000.0000
020NHG+233768.9000
需要进行两项更改:
awk语句必须是大括号,而不是parens。
格式宽度必须从%+06.4f
增加到%+012.4f
。
Sun OS上的默认awk被认为是错误的。在Sun OS上时,请考虑使用/usr/xpg4/bin/awk
或/usr/xpg6/bin/awk
。
最后,请注意,不需要cat
。我们可以删除它,从而减少必须创建的进程数。