awk:拆分" \ n"

时间:2017-05-11 20:20:37

标签: awk

我试图处理一个日志文件,其中条目被压缩成一行,换行符编码为" \ n"。我想把所有事情都放到第一个" \ n"并丢弃其余的。 awk -F"\n" '{print $1}' file不起作用,awk -F"\\n" '{print $1}' file也不起作用。这个命令的正确形式是什么?

2 个答案:

答案 0 :(得分:2)

$ echo 'a\nb'
a\nb

$ echo 'a\nb' | awk -F'\\\\n' '{print $1}'
a

原因如下:在正则表达式比较中考虑上述字符的这些用法:

  • n =文字字符n$0 ~ /n/
  • \n =文字换行符($0 ~ /\n/
  • \\ =在正则表达式常量中使用反斜杠($0 ~ /\\/
  • \\\\ =在动态正则表达式中使用反斜杠($0 ~ "\\\\"

最后一个是因为动态regexp是一个字符串,必须被解析一次才能转换为正则表达式,然后在用作regexp时再次被解析,所以因为它被解析两次所以需要将所有转义加倍

由于字段分隔符基本上是一个正则表达式(有几个曲折),当你说-F "whatever"时,你将FS变量定义为动态正则表达式,因此转义必须加倍。

答案 1 :(得分:0)

由于您要删除\n之后的所有内容,请使用

awk -F '\\\\n' '{print $1}' fileName

这将查找\n(使用\转义反斜杠并使用n转义\)并将所有内容打印到其中。