Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk:Split on"\";_Awk - Fatal编程技术网

awk:Split on"\";

awk:Split on"\";,awk,Awk,我正在尝试处理一个日志文件,其中的条目被压缩为一行,换行符编码为“\n”。我希望将所有内容保留到第一个“\n”,并放弃其余内容awk-F“\n”{print$1}文件不起作用,awk-F”\\n“{print$1}”文件也不起作用。此命令的正确形式是什么?由于要删除\n之后的所有内容,请使用 awk -F '\\\\n' '{print $1}' fileName 这将查找\n(用\转义反斜杠,用\转义n)并将所有内容打印到它上面。因为要删除\n之后的所有内容,请使用 awk -F '\\\\

我正在尝试处理一个日志文件,其中的条目被压缩为一行,换行符编码为“\n”。我希望将所有内容保留到第一个“\n”,并放弃其余内容
awk-F“\n”{print$1}文件
不起作用,
awk-F”\\n“{print$1}”文件
也不起作用。此命令的正确形式是什么?

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

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

这将查找
\n
(用
\
转义反斜杠,用
\
转义
n
)并将所有内容打印到它上面。

因为要删除
\n
之后的所有内容,请使用

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

$ echo 'a\nb' | awk -F'\\\\n' '{print $1}'
a
这将查找
\n
(用
\
转义反斜杠,用
\
转义
n
),并打印所有内容

$ echo 'a\nb'
a\nb

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

这就是为什么:在ReXEP比较中考虑以上字符的使用:

  • n
    =文本字符
    n
    $0~/n/
  • \n
    =文字换行符(
    $0~/\n/
  • \\
    =在regexp常量中使用时的反斜杠(
    $0~/\\/
  • \\\\
    =在动态regexp中使用时的反斜杠(
    $0~“\\\\\”
最后一个原因是,动态regexp是一个字符串,必须解析一次才能转换为regexp,然后在用作该regexp时再次解析,因此,由于它被解析两次,所以需要将所有转义加倍

因为当你说
-F“whatever”
时,字段分隔符基本上是一个regexp(有一些扭曲),你将FS变量定义为一个动态regexp,因此转义必须加倍

这就是为什么:在ReXEP比较中考虑以上字符的使用:

  • n
    =文本字符
    n
    $0~/n/
  • \n
    =文字换行符(
    $0~/\n/
  • \\
    =在regexp常量中使用时的反斜杠(
    $0~/\\/
  • \\\\
    =在动态regexp中使用时的反斜杠(
    $0~“\\\\\”
最后一个原因是,动态regexp是一个字符串,必须解析一次才能转换为regexp,然后在用作该regexp时再次解析,因此,由于它被解析两次,所以需要将所有转义加倍


由于字段分隔符基本上是一个regexp(带有一些扭曲),当你说
-F“whatever”
时,你将FS变量定义为一个动态regexp,因此转义必须加倍。

NR==1{print$0}
可能。举一些例子来说明你到底在寻找什么会有帮助。试试
awk-F'\\\\n'
NR==1{print$0}
可能。举一些例子来说明你到底在寻找什么会有帮助。试试
awk-F'\\\\n'
!不。
n
永远不需要转义。见上面的@EdMorton答案。否<代码>n永远不需要转义。见上面的@EdMorton答案。