awk中的字符串连接
考虑以下文本文件(test.txt): 和awk脚本(test.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
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。