0

考虑以下文本文件 (test.txt):

1 1 1
7 7 6

和 awk 脚本 (test.awk)

{
    print "$0 : ", $0
    lines=(lines $0)
    print "lines : ", lines
}

然后运行:

awk -f test.awk test.txt

给出输出

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
7 7 6 :  1 1 1

而预期的输出应该(据我所知)是:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines : 1 1 17 7 6

我在这里想念什么?

(我在 Ubuntu 12.04 上使用 GNU Awk 3.1.8)

4

1 回答 1

3

您在test.txt(CRLF 或\r\n每行的末尾)有 DOS 行结尾。

带有 Unix 行尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines :  1 1 17 7 6

带有 DOS 行尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
7 7 6 :  1 1 1

使用十六进制转储程序格式化的 DOS 行结尾的输出:

0x0000: 24 30 20 3A 20 20 31 20 31 20 31 0D 0A 6C 69 6E   $0 :  1 1 1..lin
0x0010: 65 73 20 3A 20 20 31 20 31 20 31 0D 0A 24 30 20   es :  1 1 1..$0 
0x0020: 3A 20 20 37 20 37 20 36 0D 0A 6C 69 6E 65 73 20   :  7 7 6..lines 
0x0030: 3A 20 20 31 20 31 20 31 0D 37 20 37 20 36 0D 0A   :  1 1 1.7 7 6..
0x0040:

0D代码是 CR 行结尾。

于 2013-08-05T18:57:44.303 回答