在Linux中的文本文件中合并2列的Awk脚本

时间:2015-10-25 06:54:00

标签: linux bash shell awk

我正在编写一个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中获得此输出的?

1 个答案:

答案 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   

需要进行两项更改:

  1. awk语句必须是大括号,而不是parens。

  2. 格式宽度必须从%+06.4f增加到%+012.4f

  3. Sun OS上的默认awk被认为是错误的。在Sun OS上时,请考虑使用/usr/xpg4/bin/awk/usr/xpg6/bin/awk

    最后,请注意,不需要cat。我们可以删除它,从而减少必须创建的进程数。