2015-10-25 59 views
-1

我正在编写一个shell脚本,下面是我想要实现的。Awk脚本合并Linux中的文本文件中的2列

我有一个文件 - 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

在你想要的输出的第一行中,'-23.50'被转换为'+ 000023.5000'。标志是故意改变的吗? – John1024

回答

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增加到。

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

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