Awk 磁场分离器

Awk 磁场分离器,awk,gawk,Awk,Gawk,我有很多编程经验,但我对awk还是相当陌生的。有些事情不像我预料的那样。有人能帮我澄清一下吗 在linux上,我的命令: gawk-f do3 tmp6.txt 我的源文件do3 #!/bin/gawk -f BEGIN { FS="-" } {print "Two is " $2 "One is" $1 "zero is" $0} 我的输入文件tmp6.txt ~BAND:3-10M ~MODE:2-CW ~QSO_DATE:8-20111130 ~TIME_ON:6-175415 ~eor

我有很多编程经验,但我对awk还是相当陌生的。有些事情不像我预料的那样。有人能帮我澄清一下吗

在linux上,我的命令: gawk-f do3 tmp6.txt

我的源文件do3

#!/bin/gawk -f
BEGIN {
FS="-"
}
{print "Two is " $2 "One is" $1 "zero is" $0}
我的输入文件tmp6.txt

~BAND:3-10M
~MODE:2-CW
~QSO_DATE:8-20111130
~TIME_ON:6-175415
~eor-

~PFX:2-K4
~CQZ:1-5
~ITUZ:1-8
~eor-
我对控制台的输出:

One is~BAND:3zero is~BAND:3-10M
One is~MODE:2zero is~MODE:2-CW
One is~QSO_DATE:8zero is~QSO_DATE:8-20111130
One is~TIME_ON:6zero is~TIME_ON:6-175415
One is~eorzero is~eor-
zero isOne is
One is~PFX:2zero is~PFX:2-K4  
One is~CQZ:1zero is~CQZ:1-5
One is~ITUZ:1zero is~ITUZ:1-8
One is~eorzero is~eor-
zero isOne is
以第一行为例,我本可以预料的是 在每一行中,我认为应该是开头的是

Two is followed by the value assigned to $2, the value after the "-" in each line.
然而,这在每一个案例中都是缺失的

其他更复杂的案例表现出更不寻常的行为(比如后标签),但如果我能弄清楚这一部分,也许这将帮助我理解其余部分

提前感谢,,
JimR

您的文件很可能在行尾包含^M。在运行
gawk
命令之前:

dos2unix tmp6.txt

这将删除^M个字符。

非常适合我,谢谢。你无法想象我花了多少个小时研究这个问题,试图简化它。当然,^M不会出现在vi中。你一提到这一点,我就尝试了内置在Midnight Commander中的mcedit,果然,它们出现了!再次感谢您的帮助。@JimR:如果您的意思是没有出现在vim中,那是故意的。请参阅如何在打开非本机文件格式时获得警告。@JimR:另一种处理行尾的方法是告诉gawk有关它们的信息:
BEGIN{RS=ORS=“\r\n”}…
如果要保留dos行尾,或者
BEGIN{RS=“\r\n”}
输出本机行尾。