在mac命令行中使用awk awk问题

时间:2014-05-10 21:10:50

标签: macos awk

我有以下文本文件records.text

IronMan
1
2
3


Batman
1
2
3

我有以下awk命令

awk 'BEGIN{ FS="\n"; RS="\n\n"} {print NR, ":", $1, $2}' records.text

我得到以下输出

1: Ironman
2: 1
3: 2
4: 3
5: 
6: Batman
7: 1
8: 2
9: 4
Expected output:
1: Ironman 1
2: Batman 1

哪个错了。这意味着RS变量未被拾取并且仍然使用默认" \ n"作为记录分隔符?其他人有同样的问题吗?任何解决方案?

2 个答案:

答案 0 :(得分:3)

与gnu awk不同,OSX的BSD awk不处理多字符记录分隔符。你必须以不同的方式尝试,一次处理一行。

答案 1 :(得分:2)

从你的表达中,我确实得到了(在添加了缺失之后}

awk 'BEGIN{ FS="\n"; RS="\n\n"} {print NR, ";", $1, $2}' file
1 ; IronMan 1
2 ;  Batman

在此处遗漏1,与您喜欢的内容进行比较。 PS这还需要gnu awk

中的多个字符RS

当您处理由空行分隔的记录时,您应该将记录选择器设置为空。

awk -v RS="" '{print NR, ";", $1, $2}' file
1 ; IronMan 1
2 ; Batman 1