是否有一个字段存储在正则表达式中使用的精确字段分隔符 FS,相当于 RS 的 RT?

2024-01-12

In GNU Awk 的 4.1.2记录分割gawk https://www.gnu.org/software/gawk/manual/gawk.html#gawk-split-records我们可以读到:

When RS是单个字符,RT包含相同的单个字符。然而,当RS是一个正则表达式,RT包含与正则表达式匹配的实际输入文本。

这个变量RT非常有用一些案例 https://stackoverflow.com/a/64971217/1983854.

同样,我们可以设置一个正则表达式作为字段分隔符。例如,在这里我们允许它是“;”或“|”:

$ gawk -F';' '{print NF}' <<< "hello;how|are you"
2  # there are 2 fields, since ";" appears once
$ gawk -F'[;|]' '{print NF}' <<< "hello;how|are you"
3  # there are 3 fields, since ";" appears once and "|" also once

但是,如果我们想再次打包数据,我们没有办法知道两个字段之间出现了哪个分隔符。因此,如果在前面的示例中我想循环遍历字段并使用以下命令再次将它们打印在一起FS,它在每种情况下都会打印整个表达式:

$ gawk -F'[;|]' '{for (i=1;i<=NF;i++) printf ("%s%s", $i, FS)}' <<< "hello;how|are you"
hello[;|]how[;|]are you[;|]  # a literal "[;|]" shows in the place of FS

有没有一种方法可以使用用于分割每个字段的特定字段分隔符来“重新打包”字段,类似于 RT 允许做的事情?

(问题中给出的例子相当简单,但只是为了说明这一点)


有没有一种方法可以使用用于分割每个字段的特定字段分隔符来“重新打包”字段

Using gnu-awk split() https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html使用提供的正则表达式有一个额外的第四个参数用于匹配的分隔符:

s="hello;how|are you"
awk 'split($0, flds, /[;|]/, seps) {for (i=1; i in seps; i++) printf "%s%s", flds[i], seps[i]; print flds[i]}' <<< "$s"

hello;how|are you

更易读的版本:

s="hello;how|are you"
awk 'split($0, flds, /[;|]/, seps) {
   for (i=1; i in seps; i++)
      printf "%s%s", flds[i], seps[i]
   print flds[i]
}' <<< "$s"

注意4号seps参数输入split它通过第三个参数中使用的正则表达式存储匹配文本的数组,即/[;|]/.

当然它并不像RS, ORS and RT,可以写成:

awk -v RS='[;|]' '{ORS = RT} 1' <<< "$s"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有一个字段存储在正则表达式中使用的精确字段分隔符 FS,相当于 RS 的 RT? 的相关文章

  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • bash:清理三个文件的外连接,保留文件成员资格

    考虑以下三个文件 其标题位于第一行 file1 id name in1 1 jon 1 2 sue 1 file2 id name in2 2 sue 1 3 bob 1 file3 id name in3 2 sue 1 3 adam 1
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • GNU Global 和 GTAGS 找不到类定义

    我在全局查找类 结构定义时遇到问题 我可以使用丰富的 ctags 和 cscope 找到它们 所有标记文件都是从相同的源文件列表构建的 我配置并构建了全局等 仅指定了 prefix configure 确实发现了 exhuberant 并且
  • 在 GNU C++ 编译器中运行具有多个源文件的程序

    我在 Windows 7 操作系统上使用 DEV GNU c 编译器 我需要知道如何编译具有多个源文件的程序 这是例子 FILE1 void f1 printf this is another file under same program
  • 使用 awk 如何组合两个文件中的数据并将第二个文件中的值替换到第一个文件中?

    有什么想法如何使用 awk 进行以下操作吗 两个输入文件 data txt和keys txt data txt 包含一些数据 A 1 B 2 A 3 keys txt 包含 键 值 对 本例中的 C 不是 data txt 的一部分 但 a
  • 使用 awk 从文件中提取特定行

    我有两个文件 一个文件是我的数据 另一个文件是我想从数据文件中提取的行号列表 我可以使用 awk 读取行文件 然后提取与行号匹配的行吗 例子 数据文件 This is the first line of my data This is th
  • 使用 BASH 和 AWK 创建 HTML 表

    我在创建 html 表来显示文本文件中的统计信息时遇到问题 我确信有 100 种方法可以做得更好 但这里是 以下脚本中的注释显示了输出 bin bash function getapistats curl s http api exampl
  • 向 CSV 文件添加新列

    我有一个 CSV 文件 如下所示 12345 TestTest 1 2 TestTest 我想将日期 例如 YYYY MM DD HH MM SS 添加到 CSV 文件的开头或结尾 正如您在上面的示例中所看到的 双引号 包含列上的值 逗号
  • Perl 脚本(或任何东西)来合计 CSV 列

    我写了 在其他人的很多帮助下 awk command https stackoverflow com questions 4159224 excel and awk disagree about csv totals 4159404 415
  • awk 数组输出行数和平均值

    感谢以下 karakfaawk输出结果为数组 我正在尝试添加 2到数组并输出它 2基本上是唯一条目出现的次数 正如我正在学习的awk数组我不知道我的尝试是否接近 Input chr1 955542 955763 AGRN exon 1 1
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 如何从 Unix 文件中删除空行

    我需要从输入文件中删除所有空白行并写入输出文件 这是我的数据如下 11216 33 1032747 64310 1 0 0 1 878 0 0 0 1 1 1 087 5 1 1 18 JAN 13 000603221321 11216 3
  • AWK 中多行的匹配正则表达式。 && 操作员?

    我不确定 运算符在正则表达式中是否有效 我想做的是匹配一行 使其以数字开头并具有字母 a 下一行以数字开头并具有字母 b 并且下一行 字母 c 该 abc 序列将用作开始读取文件的唯一标识符 这就是我在 awk 中想要的东西 0 9 a n
  • 如何获取视频时长(以秒为单位)? [复制]

    这个问题在这里已经有答案了 如何获取以秒为单位的视频时长 我尝试过的 ffmpeg i file flv 2 gt 1 grep Duration Duration 00 39 43 08 start 0 040000 bitrate 38
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • 如何使用 Bash 编写二进制文件?

    我的问题是我需要创建一个包含以下确切字节的文件 48 00 49 00 我不能使用C perl 其他脚本语言 目标是嵌入式设备 我使用 awk 尝试过 在桌面上它确实有效 awk BEGIN printf c c c c 48 00 49
  • 在 Bash 中替换垂直线

    我很难完成我的脚本 因为这一部分没有按照我想要的方式运行 我的脚本中有这一行 cat home tmp temp1 txt awk gsub RS gsub RS print gt home tmp temp txt 效果很好 是的 但是当
  • AWK数组初始化

    是否可以使用常见的方法在AWK中初始化数组list syntax array val1 val2 val3 或者是否必须使用索引值 syntax array 0 val1 array 1 val2 array 2 val3 不 不 您可以这

随机推荐

  • 根据多个架构定义验证 XML 文件

    我正在尝试根据许多不同的模式验证 XML 文件 对人为的示例表示歉意 a xsd b xsd c xsd c xsd 特别是导入 b xsd 和 b xsd 导入 a xsd 使用
  • SQLiteDatabase close() 函数在多线程时导致 NullPointerException

    我在我的项目中发现 Android 上的 SQLiteDatabase 实现中的 close 函数在运行打开数据库 插入数据然后关闭数据库的多个线程时会引发 NullPointerException 一切都运行顺利 除非我允许每个线程在插入
  • 如何在 VBA (Excel 2010) 中将默认情况恢复为变量?

    在某些时候我不小心命名了一个变量range 全部小写 从那时起 Visual Basic for Applications 编辑器拒绝使用Range 帕斯卡大小写 它会自动将其更正为小写 我怎样才能重置它的 大脑 以忘记我过去的违规行为 注
  • ICS 文件内的超链接问题

    我创建了一个 ICS 文件 它有一个文本的超链接 在 Outlook 2013 中 它运行良好 但在其他电子邮件客户端中 它会向我显示完整的 URL 以及超链接文本 请参阅下面的屏幕截图 MAC OS 笔记本电脑 http img en25
  • 段落中每个单词的第一个字母的样式

    我正在尝试使用样式设置段落的第一个字母CSS并想使用 greensock 添加一些动画 但实际上要求是设置每个单词的第一个字母的样式 而不仅仅是第一个字母段落 对此有何建议 想法 p font size 150 color 000000 p
  • 根据url隐藏div

    抱歉 如果这是另一个转发 我一直在尝试寻找解决方案 但我尝试过的任何方法都不起作用 我正在使用一个我可以完全控制 html 的博客 我通常可以找到基本 html 的方法 但当涉及到 Java 或 CSS 时 我完全是个新手 抱歉 我什么都不
  • 获取程序图标

    我正在制作一个类似资源管理器的应用程序来浏览存储在我的计算机上的文件 我的应用程序将处于 图标 视图中 问题是 如何显示exe文件的图标 有几种方法可以做到这一点 最简单的可能是添加对System Drawing并利用Icon Extrac
  • 找不到 unicode 右箭头

    Unicode 中有这些箭头 但它缺少一个正确的 名字应该是这样的RIGHTWARDS BLACK ARROW 但没有该名称的 Unicode 字符 有一些字符看起来很相似 但我找不到合适的匹配项 我正在寻找该集合的右指向字符 基于字符名称
  • 使用 pip 安装 lxml 失败

    我正在尝试使用 pip 安装 lxml 我有 Windows 11 和 Python 版本 python 3 10 2 amd64 我也在使用 Visual Studio Code VSC 我意识到我需要 lxml 从我的 VSC 终端中的
  • 正则表达式/lastIndex - 意外行为

    我知道有一些正则表达式 lastIndex差异 但这对我来说是新的 预期行为 创建一个新的正则表达式 带有文字 构造函数 显然会创建一个带有lastIndex属性设置为零 实际行为 在 FF Chrome 中 lastIndex 属性似乎在
  • 如何从嵌套数据结构(例如解析 JSON)中提取单个值?

    我编写了一些代码来从 Web API 获取数据 我能够从 API 解析 JSON 数据 但得到的结果看起来相当复杂 这是一个例子 gt gt gt my json name ns1 timeSeriesResponseType declar
  • 如何在实体框架中创建表和视图之间的关系

    我有一个由 Visual Studio 2008 向导基于 Sql Server 2008 数据库生成的实体框架模型 该模型有一个视图 该视图在逻辑上通过连接表 通过插入 更新触发器在数据库中强制执行 与另一个表以多对多关系连接 表和视图都
  • 相互比较两个 REST 服务

    有人对编写比较两个 REST 服务的测试有什么建议吗 我们这样做是作为回归测试的一种形式 我希望能做一些类似的事情 向两个服务发送 1 的 GET 并比较结果 向两个服务发送 POST 并比较结果 向两个服务发送 PUT 并比较结果 这个想
  • WPF TextBox 不接受输入,空格和退格键有效

    我在用户控件内有文本框 并使用以下 XAML 将用户控件添加到 MainWindow
  • EventSourcing 应用程序中的用户身份验证

    我正在考虑使用 DDD CQRS EventSourcing 制作一个应用程序 但在弄清楚如何进行用户身份验证时遇到了一些麻烦 用户本质上是我的领域的一部分 因为他们对客户负责 我正在使用 ASP NET MVC 4 并且我希望只使用 Si
  • 多选 jQuery 中 json 的来源

    我有 jQuery 的多选 我想从 json 获取源代码 我从我的自动完成组合框中获取了有效的源代码 但在这里它不起作用 My code document ready function var warning message select
  • 如何获取在从属设备上执行的管道阶段内的 Jenkins 主 IP/主机名?

    我有一个 Jenkins 声明式管道 我在一个阶段进行构建 并在另一阶段在不同的机器上进行测试 我还有一个 Selenium 集线器与 Jenkins master 在同一台机器上运行 pipeline agent none stages
  • 在代码隐藏的html控件中设置值而不进行服务器控制

    在代码隐藏的html控件中设置值而不进行服务器控制
  • ssh 多个命令将问号附加到文件名

    我有一个数据库传输脚本 它使用 bzip2 来最大限度地减少服务器上大型数据库的锁定 第一行是 ssh root server mysqldump db bzip2 gt root db sql bz2 这适用于许多服务器 但在新的 Ubu
  • 是否有一个字段存储在正则表达式中使用的精确字段分隔符 FS,相当于 RS 的 RT?

    In GNU Awk 的 4 1 2记录分割gawk https www gnu org software gawk manual gawk html gawk split records我们可以读到 When RS是单个字符 RT包含相同