问题标签 [gawk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2181 浏览

perl - 命令行枢轴

过去几天我一直在寻找一组命令行工具、perl 或 awk 脚本,它们可以让我非常快速地转置以下数据:

进入这个:

请注意,每个“单元格”在数据集中只有一个值(即,与电子表格一样,行“1”列“A”没有任何重复)

我已经尝试过各种 awk shell 实现来转置数据 - 但似乎无法让它们工作。我的一个想法是将每个“Col”值剪切到一个单独的文件中,然后使用“join”命令行通过“Row”将它们重新组合在一起——但必须有一种更简单的方法。我确信这非常简单 - 但我有点挣扎。

我的输入文件有列 A 到 G(主要包括可变长度字符串)和 10,000 行。如果我可以避免将所有内容加载到内存中,那将是一个巨大的优势。

给任何有答案的人邮寄啤酒!

一如既往 - 非常感谢您的帮助。

干杯,

乔什

ps - 我有点惊讶,没有一个开箱即用的命令行工具来执行这种非常基本的枢轴/转置操作。我查看了http://code.google.com/p/openpivot/http://code.google.com/p/crush-tools/两者似乎都需要聚合计算。

0 投票
1 回答
3939 浏览

awk - 用 awk 匹配多个模式多次记录

我试图一次有效地匹配多个模式,原则上效果很好:

此外,我想匹配记录中的所有事件:

现在扩展上面的示例以匹配多个模式,我最终会得到一系列 findall 调用:

问题在于,对于许多不同的模式 (>100),这种方法的性能几乎不如第一个样本。这是有道理的,因为我猜这个模式不会出现在同一个自动机中。

有没有办法稍微加快速度?例如,为多种模式提供“匹配”。我想我可以连接模式(abc|def),但是我会丢失确切匹配的模式的信息。

更新:每一次出现都应该匹配:

作为输入数据导致2 个匹配记录(给定标准分隔符),但如果与模式“abc”和“xyz”一起使用,则整个数据中有 4 个匹配。这篇文章中的第一个示例至少报告了3 个匹配项,但未能在第一条记录中检测到多次出现的“abc”

0 投票
2 回答
4650 浏览

python - Python:在两个文件中查找公共文本

让我给出示例文本文件:

例如在file1.txt中的数据是:-

file2.txt中的数据是:-

期望的结果:

我如何得到这个结果?我想使用pythonorgawksed

0 投票
5 回答
153 浏览

replace - 查找特定列并用 gawk 用特定值替换以下列

我试图找到我的数据有重复行的所有地方并删除重复行。另外,我正在寻找第 2 列的值为 90 的位置,并用我指定的特定数字替换以下第 2 列。

我的数据如下所示:

我希望我的数据看起来像:

我的代码:

我已经能够成功删除重复的行,但是,我无法执行我的代码的下一部分,即替换我在 BEGIN 中指定的值作为 ERRORVALUES (10=1, 11=2, 12=3 , 30=4, 31=5, 32=6) 与包含该值的实际列。本质上,我只想用我的 ERRORVALUE 替换该行中的值。

如果有人可以帮助我,我将不胜感激。

0 投票
1 回答
128 浏览

c - 在 c 中使用 gawk

谁能告诉我如何在c中使用以下gawk命令?就像我们使用“系统”函数在 c 中使用一些 shell 命令一样。此外,我想在下面的命令中给出数字,即 6、2、8 作为参数。

谢谢,任何帮助将不胜感激。

0 投票
2 回答
109 浏览

replace - replacing a specific column with a specific value using gawk

I am trying to find everywhere my data has a 90 in column 2 and two lines above change the value of column 2. For example in my data below, if I see 90 at line 11 I want to change my column 2 value at line 9 from 11 to 5. I have a predetermined set of values I want to change the number to; the values will always be 10,11,12,30,31,32 to 1,2,3,4,5,6 respectably.

My data

What I want

I have been trying to store the previous line and use that as a reference but I can only go back one line, and I need to go back two. Thank you for your help.

0 投票
5 回答
51976 浏览

printing - 使用 gawk 将每 n 行打印成一行

我有一个非常大的文件,我需要在其中获取每 n 行并将其打印成一行。

我的数据:

我希望我的数据看起来像这样:

这当然是一个例子,我希望我的巨大数据文件每隔 10 行。到目前为止我试过这个:

0 投票
4 回答
6772 浏览

awk - 使用 gawk 转置列和行

我正在尝试转置一个非常长的文件,我担心它不会被完全转置。

我的数据看起来像这样:

我希望我的数据看起来像这样:

第一个字符串的长度会被证明是一个问题吗?我的文件比这大约 2000 行长得多。也可以将第一个字符串的名称更改为Thisis234,然后转置吗?

0 投票
1 回答
199 浏览

http - gawk 在没有超时的情况下通过管道读取二进制数据的最后一位?

我有一个已经用 gawk 编写的程序,它可以从互联网上下载很多小信息。(媒体扫描仪和索引器)

目前它启动 wget 来获取信息。这很好,但我想简单地重用调用之间的连接。程序的运行可能会对同一个 api 服务进行 200-2000 次调用。

我刚刚发现 gawk 可以做网络并找到geturl 但是该页面底部的建议很受重视,我找不到一种简单的方法来阅读最后一行并保持连接打开。

由于我主要读取 JSON 数据,我可以设置 RS="}" 并在正文长度达到预期的内容长度时退出。不过,这可能会与任何尾随空格中断。我想要一个更强大的方法。有没有人有更好的方法来实现在 awk 中保持连接打开的零星 http 请求。目前我有以下结构......

可惜这件小事似乎破坏了这里的所有潜力。万一有人问:) ..

  • 最初选择 awk 是出于历史原因——当时这个嵌入式平台上没有太多其他语言选项。
  • 提前收集所有 URL 并传递给 wget 并不容易。
  • 在 perl/python 等中重新实现不是一个快速的解决方案。
  • 我已经研究过尝试将 url 传送到命名管道并进入 wget -i - ,但这是行不通的。数据被缓冲,并且 unbuffer 不可用 - 我认为 wget 在处理之前收集所有 URL 直到 EOF。
  • 数据很小,因此缺乏压缩不是问题。
0 投票
3 回答
4086 浏览

bash - 检查给定的 strftime 格式是否与日期匹配

我有 strftime 格式的时间,比如说(%Y-%m-%d %H:%M:%S)和一个应该包含这种数据的文件,例如(2012-02-11 17:15:00). 我需要检查给定的模式是否真的与数据匹配。如何解决这个问题?啊,约会?

编辑: 更多信息:用户输入 strftime 格式,比如说输入。然后他输入一个应该包含这些日期的文件。我需要确保这些数据是有效的(他没有犯错)。所以我需要检查输入文件中的行,看看是否有与给定模式匹配的数据。例子:

  • 用户输入 strftime 格式:(%Y-%m-%d %H:%M:%S)

    输入文件:(2012-02-11 17:15:00) long sentence

    有效的

  • 用户输入 strftime 格式:Date[%Y.%m.%d %H:%M:%S]

    输入文件:Date-2012.02.11 17:15:00- long sentence

    无效的