gpt4 book ai didi

awk - win-7 cmd 上的 GNU awk,不会将输出重定向到文件

转载 作者:行者123 更新时间:2023-12-04 20:28:21 25 4
gpt4 key购买 nike

如果相关,我直接从 sourceforge 中的 GNU 指向源下载了 GNU awk V 3.1.6。

我正在使用 wget for windows 获取 URL 页面。处理传入文件后,我将其缩减为单行,我必须从中提取一个键值,这是一个很长的字符串。最后一行看起来像这样:

<ENUM_TAG>content"href:e@5nUtw3Fc^b=tZjqpszvja$sb=Lp4YGH=+J_XuupctY9zE9=&KNWbphdFnM3=x4*A@a=W4YXZKV3TMSseQx66AHz9MBwdxY@B#&57t3%s6ZyQz3!aktRNzcWeUm*8^$B6L&rs5X%H3C3UT&BhnhXgAXnKZ7f2Luy*jYjRLLwn$P29WzuVzKVnd3nVc2AKRFRPb79gQ$w$Nea6cA!A5dGRQ6q+L7QxzCM%XcVaap-ezduw?W@YSz!^7SwwkKc"</ENUM_TAG>

我需要两个 "符号之间的长字符串。

所以我将这个结构与 awk 一起使用

type processedFile | awk -F "\"" "{print $2}"

我得到了预期的输出

href:e@5nUtw3Fc^b=tZjqpszvja$sb=Lp4YGH=+J_XuupctY9zE9=&KNWbphdFnM3=x4*A@a=W4YXZKV3TMSseQx66AHz9MBwdxY@B#&57t3%s6ZyQz3!aktRNzcWeUm*8^$B6L&rs5X%H3C3UT&BhnhXgAXnKZ7f2Luy*jYjRLLwn$P29WzuVzKVnd3nVc2AKRFRPb79gQ$w$Nea6cA!A5dGRQ6q+L7QxzCM%XcVaap-ezduw?W@YSz!^7SwwkKc

但是当我运行相同的命令并将输出重定向到一个文件时,例如

type processedFile | awk -F "\"" "{print $2}" > tempDummy

我收到此错误消息:

awk: cmd. line:1: fatal: cannot open file `>' for reading (Invalid argument)

我在想\"字段分隔符让我有些伤心,并将最后一个 "字符作为非闭合字符串值,但我不确定如何正确处理。顺便说一句,相同的构造在我的 centos 盒子上运行得非常好。

非常感谢任何指点。我尝试阅读我能找到的所有自述文件,但没有一个涉及输出重定向。

最佳答案

是的,您对 cmd 解析器如何处理引用区域的开始/结束位置有疑问。 cmd 看到的是

awk -F "\"" "{print $2}" > tempDummy
^-^^-^ ^-------------
1 2 3

也就是三个引用区。由于 > 落在引用区域内,因此不作为重定向运算符,它是管道右侧命令的参数。

这可以通过转义(^cmd 的一般转义字符)一个引号来确保 cmd 正确生成最终结果来解决解析行后的命令,并且重定向不是 awk 命令的一部分

type processedFile | awk -F ^"\"" "{print $2}" > tempDummy
^^ ^..........^

或者您可以重新排序命令以将重定向操作放在它无法干扰的地方

type processedFile | > tempDummy awk -F "\"" "{print $2}"

但是虽然使用这种方法可行,但在其他情况下可能稍后会失败,因为 awk 代码 ({print $2}) 被放置在未加引号的区域。

有一种更简单、标准、可移植的方法,无需处理引号转义:与其将引号作为参数传递,不如使用 awk 字符串处理,只包含引号字符的转义序列

type processedFile | awk -F "\x22" "{print $2}" > tempDummy

关于awk - win-7 cmd 上的 GNU awk,不会将输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com