问题标签 [unix-text-processing]

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 回答
114 浏览

for-loop - AWK:使用类似于 FNR==NR 方法的方法连接和处理三个或更多文件

因为我在学习awk;我发现FNR==NR方法是处理两个文件的一种非常常见的方法。如果FNR==NR;然后是first file,当从连接文件中读取每一行时FNR重置为,这意味着它显然是.1!(FNR==NR)second file

当涉及三个或更多文件时,我看不到第二个和第三个文件的方式,因为它们的!(FNR==NR)条件相同。这让我试图弄清楚怎么会有类似FNR2and的东西FNR3

所以我实现了一个方法来处理三个文件awk。假设FNR1 FNR2 FNR3每个文件都有。对于我制作for loop的每个单独运行的文件。每个循环的条件都是相同的NR==FNR#,实际上得到了我的预期:

所以我想知道是否有更清醒、更简洁的方法awk可以用下面的代码提供类似的结果

示例文件内容

AWK for 循环

当前和所需的输出

你可以看到NR对齐FNR#并且它是可读的 which NRis for which file#


另一种方法

我在FNR==1{++f} f==1 {}这里找到了这个方法使用 awk 处理 3 个文件

arr1[1]但是每次读取新行时,此方法正在替换

失败尝试 1

for 循环成功arr1[1]未更改)


0 投票
2 回答
55 浏览

awk - awk 数组已创建,但缺少元素

我有这个示例文件

我想创建一个数组,其中年份值是每个具有给定条件$2的唯一用户 ID 对的元素。例如和$1$4$3=="stop"arr[userXid1]=2010arr[userTid1]=2014

我的代码:

预期输出:

但这会打印空行。当我print length(arr)给出的时候3,这是有道理的。但$2价值观不存在,我不知道为什么。任何帮助表示赞赏。


补充:最终代码,与问题无关。

0 投票
3 回答
32 浏览

unix-text-processing - Bash 修剪一些文本

我有一个看起来像这样的输出

我怎样才能只grep最后的数字?

谢谢

0 投票
2 回答
75 浏览

awk - gsub:删除直到第一次出现而不是一行中给定字符的最后一次出现

我有一个 html 文件,我基本上尝试删除第一次出现的<...>with sub/gsub功能。

我使用 awk 正则表达式. * +来匹配< >. 然而,第一次出现>的被转义(?)。我不知道是否有解决方法。

示例输入 file.txt x添加不打印空)

代码

电流输出:

所需的输出:

0 投票
2 回答
161 浏览

bash - 通过定义标题的正则表达式拆分 Markdown 文本文件

我正在尝试使用命令行程序将较大的文本文件拆分为块:

  • 拆分定义的正则表达式模式
  • 由该正则表达式模式中的捕获组定义的文件名

文本文件的格式为:

输出应该是具有以下文件名和内容的这两个文件:

2020-01-01.md ↓</p>

2020-01-02.md ↓</p>

我似乎无法正确掌握所有标准。

要拆分的正则表达式模式(分隔符)很简单,类似于^# (2020-.*)$

要么我无法设置一个多行正则表达式模式,它会越过\n换行符并在下一次出现分隔符模式时停止。

或者我可以在正则表达式模式上拆分csplit,但我不能用捕获的内容命名文件(2020-.*)

awk split()or也一样match(),不能让它完全工作。

我正在寻找一个通用的解决方案,参数是定义块开始(例如# 2020-01-01)和结束(例如下一个日期标题# 2020-01-02EOF)的正则表达式模式

0 投票
2 回答
41 浏览

shell - 如何在文本文件中每隔 2 行插入一个新行?

从此开始,

例子.txt

走到这一步,

附加文本.txt

0 投票
1 回答
45 浏览

unix-text-processing - 如何检查一个文件中的字段是否不包含 UNIX 中另一个文件中的值列表

我有两个文件,一个具有该列的交易价值的数据。假设货币代码和另一个文件具有有效/预期的货币代码。

文件1:

ID|col1|curr_cd

1|abc|印度卢比

2|定义|美元

3|xyz|3AB

4|tuv|ABC

……

文件2

curr_cd

印度卢比

美元

加元

……

我需要那些无效的值列表,这意味着存在于 File1 中但不存在于 File2 中。File1 可能包含数百万个事务,因此我需要一个 AWK 或一个可以更快地为我提供结果的命令。

任何人都可以在这里帮助我。

0 投票
1 回答
38 浏览

bash - 如何对 Endnote Export File 格式的字段进行排序,其中 Line 在地址中包含 GRAZ 作为第一行?

我有一个 Endote 导出文件,如下所示:

以%+开头的字段包含作者地址,根据作者的作者地址(1 到 n 的关系),它可以包含更多行。每个作者地址由换行符(换行符)分隔

现在我想问一下如何按 GRAZ 所在的行对该字段进行排序。Graz 所在的这一行,它们应该是列表中的第一行。

有没有办法通过 bash 文本处理工具来做到这一点,或者需要我编写一个 Delphi 的程序来访问和导入尾注导出转储。

上面这个例子的输出应该是

我会很高兴并感谢任何有趣的建议。

0 投票
2 回答
155 浏览

regex - 如何使用正则表达式和 sed 提取分支名称?

如何使用 bash 从字符串中提取分支名称?例如,我有以下命令:

branch=$(git branch -a --contains $sha)

这可能会返回:

  1. * branch-1.0(前缀始终是星号)

  2. branch-2.0 remotes/origin/branch-2.0(这里可能是换行而不是空格)

  3. master remotes/origin/master (这里可能是换行而不是空格)

而且我只需要分支名称(并且只需要一次)master-branch-2.0branch-1.0. 我知道它可以用sed命令来完成,但我不知道怎么做。

我使用以下正则表达式:(branch-[0-9].[0-9])|(master)

0 投票
2 回答
47 浏览

bash - 在 awk 中处理具有多个分隔符的文本

我有一个看起来像的文字 -

我想要count:1列中的数字,所以1我希望将这些数字存储在一个数组中。

这似乎非常重复且效率不高,有什么想法可以简化吗?