问题标签 [nawk]

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 投票
2 回答
4382 浏览

unix - awk 和 nawk 的不同结果

我只是在一个包含大约 2.5 亿条记录的文件上运行了这两个命令。

记录长度为 482。第一个命令给出了 file2.txt 中正确的记录数,即;6000 万,但 nawk 命令只给出 420 万。

我很困惑,想知道是否有人遇到过这样的问题。这个简单的命令究竟是如何在内部以不同的方式处理的?在使用 nawk 时,是否有一个缓冲区只能容纳一定数量的字节?

如果有人能对此有所了解,将不胜感激。

我的操作系统详细信息是

0 投票
2 回答
586 浏览

awk - 包含 {} 的 awk 语法

据我了解,在 awk 中,可以使用以下任一方法开始条件评估:

在通用命令行中

我发现将 (body) 括在括号中是最合乎逻辑的,例如 {(body} (称为“括号”)。 

在 GNU awk、Ubuntu 12.04 下,如果括号括起来,则只有 4 个选项中的第一个会执行 - 至少在我的机器上(其他选项会产生语法错误)。如果我不加括号地运行该行,则只有第一个失败,其余 3 个工作正常。有人可以仔细解释为什么会这样吗?

0 投票
6 回答
3575 浏览

perl - 需要根据文件其他列中的值替换文件的特定列值

下面是我的文件内容,下面是我的要求基于第 1 列和第 5 列中的值,我想用“1”替换第 7 列中的值。

例如:

  1. 如果第 1 列 =“更改”且第 5 列 =“延迟”,则将第 7 列中的值替换为“1”。
  2. 如果第 1 列 =“更改”且第 5 列 =“延迟”,则将第 7 列中的值替换为“1”。
  3. 否则不要对行做任何事情,保持原样。

输入文件:

上面只是一个示例,以便于解释。但是我想从文件中传递第 1 列和第 5 列的值以匹配文件中的值。如果匹配,则仅将第 7 列替换为值“1”,否则不对行执行任何操作,保持原样。

我尝试了几个选项,但无法达到所需的结果。

上面的命令正在替换文件中所有 3 的值,而不考虑字段。但我只想通过在循环中将不同的值传递给第 1 列和第 4 列来替换基于第 1 列和第 4 列的第 6 列值。

添加更多信息:

正如我上面提到的,上面的例子只是我的问题的最简单形式,让大家理解需求。我有一个名为“listfile”的文件,其中包含用于匹配的第 1 列和第 5 列的值列表。如果源文件中第 1 列和第 5 列中的值与从文件“listfile”传递的值匹配,则解决方案应将第 7 列中的值替换为“1”。否则不要对源文件中的行做任何事情,保持原样。

我尝试在下面做,但无法达到要求。

替换第 7 列后,原始源文件和修改后的源文件之间的记录数应相同。唯一的问题是对于文件列表文件中第 1 列和第 5 列的所有值,我需要将第 7 列值替换为“1”。

谢谢,

0 投票
7 回答
10524 浏览

linux - 将行转换为unix中的列

我有下面给出的输入文件

输入文件

我正在寻找的输出。

我尝试过使用 awk 命令,但没有得到想要的输出。任何人都可以帮助我吗?

0 投票
1 回答
85 浏览

nawk - 如何在多行 nawk 输出中搜索不等于值

我有这个用于 CVS 状态管理的当前解决方案:-

这让我显示了本地修改的文件和需要修补的文件,这很棒。然而,对我来说,一个可以捕捉所有状态的更好的解决方案是当状态不等于“最新”时。我试过 s!= 和 s<> 但它似乎只允许 =。

0 投票
4 回答
217 浏览

string - 如何检查 NAWK 子字符串是否有几个可能的值?

我是 NAWK(或 AWK)的初学者,但我知道您可以使用以下方法检查子字符串值:

(这是通过 UNIX 运行的,因此是 ' $0'。)

如果字符串可以是 ABCDMNOP 怎么办?有没有一种简单的方法可以将其编码为单线?我试过寻找,但到目前为止只发现自己迷路了......

0 投票
4 回答
154 浏览

linux - 比较两个文件并合并数据

我有以下文件,

总计.txt

order1,5,item1
order2,6,item2
order3,7,item3
order4,6,item4
order8,9,item8

改变了.txt

order3,8,item3
order8,12,item8

total.txt 是总订单数据,changed.txt 是最近更改的数据。我想将最近的更改与总数合并,我希望输出为,

输出.txt

order1,5,item1
order2,6,item2
order3,8,item3
order4,6,item4
order8,12,item8

注意:total.txt(第 3 和第 5)行的第 2 列用 changed.txt 文件更新

我已经使用下面nawk的来比较第一个 coulmn,但无法将其打印到输出文件。请帮助完成以下命令

nawk -F"," 'NR==FNR {a[$1]=$2;next} ($1 in a) "print??"' total.txt changed.txt

0 投票
4 回答
416 浏览

perl - 使用单行删除第 N 次出现之后的内容

我想删除包含它的任何字段中第四次出现字符“:”之后的内容。请参阅示例:

输入:

预期输出:

所以基本上任何具有“:”的字段都应该被删除。请注意,第三行没有任何变化,因为“:”只出现了三次。我已经尝试并找到了一个解决方案(不好),它不仅适用于第一行,也不适用于第二行,因为它有更多的逗号“,”

不完整的解决方案:

提前致谢

0 投票
2 回答
614 浏览

unix - awk 或 sed 在模式的第一次出现和模式的最后一次出现之间打印文本

我已经看到了一些在模式之间打印的解决方案,但我无法将它们放在一起来解决我的问题。我有一个包含如下所示视图定义的文本文件,需要提取第一个和最后一个大括号之间的定义。请注意:中间有开式和闭式大括号,应打印。awk 或 sed 中的任何解决方案?

需要输出:

0 投票
1 回答
73 浏览

bash - Printing lines according to their columns in shell scripting

i know it is very basic question but im total new in shell scripting

i a txt file called 'berkay' and content of it is like

I want to print the lines whose second column is error so the output will be

03:05:18 error blablablablabla2

I am thinking about something like " if nawk { $2}" but i need help.