awk中的字符串连接

awk中的字符串连接,awk,concatenation,Awk,Concatenation,考虑以下文本文件(test.txt): 和awk脚本(test.awk) 然后运行: 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)在test.tx

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

和awk脚本(test.awk)

然后运行:

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)

test.txt
中有DOS行结尾(CRLF,或
\r\n
在每行末尾)

以Unix行结尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines :  1 1 17 7 6
$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
7 7 6 :  1 1 1
带DOS行结尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines :  1 1 17 7 6
$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行的结尾。

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

以Unix行结尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines :  1 1 17 7 6
$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
7 7 6 :  1 1 1
带DOS行结尾的输出:

$0 :  1 1 1
lines :  1 1 1
$0 :  7 7 6
lines :  1 1 17 7 6
$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行的结尾。

上述代码在Arch Linux上的效果与我预期的一样。将test.awk文件中的
lines=(lines$0)
行更改为
lines=(lines$0”)
以在行之间添加一个空格,否则工作时的最终结果是
行:1 1 17 7 6
顺便说一句,我正在使用awk版本
4.1.0
。谢谢您的评论。。那么,既然它对你有用,我想一定是我的信心有问题吧?不客气;我不知道,我想。。。我认为我根本没有配置
awk
。您可以尝试使用
-F“\n”
将分隔符指定为
\n
,但我认为最好的办法是检查更新,如果仍然没有帮助,则检查您的配置。如果您确实有
awk
的自定义配置,请将其添加到您的帖子中。以上内容在ArchLinux上的效果与我预期的一样。将test.awk文件中的
lines=(lines$0)
行更改为
lines=(lines$0”)
以在行之间添加一个空格,否则工作时的最终结果是
行:1 1 17 7 6
顺便说一句,我正在使用awk版本
4.1.0
。谢谢您的评论。。那么,既然它对你有用,我想一定是我的信心有问题吧?不客气;我不知道,我想。。。我认为我根本没有配置
awk
。您可以尝试使用
-F“\n”
将分隔符指定为
\n
,但我认为最好的办法是检查更新,如果仍然没有帮助,则检查您的配置。如果您确实有
awk
的自定义配置,请将其添加到您的帖子中。是的(
子(“\r”,”)
可以工作),或在Unix系统上使用Unix文件,如有必要,可在文本模式下使用FTP传输文件,或使用
dos2unix
或等效工具将文件从DOS转换为Unix。是的(可以使用
sub(“\r”,”)
),或在Unix系统上使用Unix文件,如有必要,可在文本模式下使用FTP传输文件,或使用
dos2unix
或等效工具将文件从DOS转换为Unix。