Awk 的 FNR==NR 在 Ruby 中的等价物是什么?

2023-11-30

awk 有内置变量FNR and NR从当前文件读取的记录数(通常是行数)和总数。

在 awk 中,常见的是:

$ awk 'FNR==NR {first file lines; next } {process remaining lines } f1 f2

通常,f1包含确定如何处理剩余文件的值。 (关键词、行号等)

Ruby 具备成为出色的文本处理语言的条件。红宝石有$.相当于 awk 的NR相当于什么FNR?


Given:

$ head f?.txt
==> f1.txt <==
line 1
line 2

==> f2.txt <==
line 3
line 4

红宝石有ARGF流(别名为$<如果你想感受 Perly),它要么读取 STDIN,要么从命令行打开文件。与以下行为相同awk:

$ awk '{
    printf("FILENAME: %s, FNR: %s, NR: %s, %s\n", FILENAME, FNR,NR,$0)}
' f?.txt
FILENAME: f1.txt, FNR: 1, NR: 1, line 1
FILENAME: f1.txt, FNR: 2, NR: 2, line 2
FILENAME: f2.txt, FNR: 1, NR: 3, line 3
FILENAME: f2.txt, FNR: 2, NR: 4, line 4

$ ruby -lne '
    printf("FILENAME: %s, FNR: %s, NR: %s, %s\n", $<.file.path, $<.file.lineno, $., $_)
' f?.txt
FILENAME: f1.txt, FNR: 1, NR: 1, line 1
FILENAME: f1.txt, FNR: 2, NR: 2, line 2
FILENAME: f2.txt, FNR: 1, NR: 3, line 3
FILENAME: f2.txt, FNR: 2, NR: 4, line 4

如果你想同时阅读STDIN和一个文件,你会使用-对于文件占位符:

$ echo '123' | awk '1' - <(echo 456)
123
456
$ echo '123' | awk '1' <(echo 456) -
456
123

$ echo '123' | ruby -lne 'puts $_' - <(echo 456)
123
456
$ echo '123' | ruby -lne 'puts $_' <(echo 456) -
456
123

还有一些相应的变量:

╔══════════╦═══════════════════╦═════════════════════════════════════════╗
║   awk    ║       ruby        ║                 comment                 ║
╠══════════╬═══════════════════╬═════════════════════════════════════════╣
║ $0       ║ $_                ║ unsplit record (line usually)           ║
║ NF       ║ $F.length         ║ Number of fields from autosplit         ║
║ FNR      ║ ARGF.file.lineno  ║ Number records read from current source ║
║ NR       ║ ARGF.lineno or $. ║ Total number of records so far          ║
║ (magic)  ║ ARGF or $<        ║ stream from either STDIN or a file      ║
║ $1..$NF  ║ $F[0]..$F[-1]     ║ First to last field from autosplit      ║
║ FS       ║ $;                ║ Input field separator                   ║
║ RS       ║ $/                ║ Input record separator                  ║
║ FILENAME ║ $<.file.path      ║ Filename of file being processed        ║
╚══════════╩═══════════════════╩═════════════════════════════════════════╝      

所以如果你有一个行号列表f1和一个您想要用这些行号索引的文本文件(您可以使用awk or sed做)可以使用 Ruby。

Given:

$ echo "1
2
44
2017" >f1
$ seq 10000 | awk '{print "Line", $1}' >f2

In awk你会这样做:

$ awk 'FNR==NR{ln[$1]; next} 
       FNR in ln'    f1 f2

在 Ruby 中你可以这样做:

$ ruby -lane 'BEGIN{h=Hash.new}
              if $<.file.lineno == $<.lineno
                 h[$F[0].to_i]=true
                 next
              end
              puts $_ if h[$<.file.lineno]' f1 f2

两者都打印:

Line 1
Line 2
Line 44
Line 2017

此示例的 awk 版本大约快 5 倍(使用 awk),但 Ruby 版本可以轻松支持 awk 无法支持的输入,例如 JSON、XML、复杂的 csv 等。

如果你想要相当于awk -v [same variable]在 Ruby 中,使用多个-eRuby 中的命令执行行。

要打印nawk 中文件的行n作为 shell 变量:

awk -v n="${sh_n}" 'FNR==n{print; exit}' big_file.txt

or:

awk 'FNR==n{print; exit}' n="${sh_n}" big_file.txt

在 Ruby 中执行相同的操作,即传递值${sh_n}对于 Ruby 程序,您可以执行以下操作:

ruby -e "n=${sh_n}.to_i" -e '$<.each_line{|line| if $.==n then puts line; exit(0) end}' big_file.txt

HERE是预定义的 Ruby 变量的列表。

HERE是全局变量的列表

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Awk 的 FNR==NR 在 Ruby 中的等价物是什么? 的相关文章

  • Ruby on Rails - 无法加载此类文件 - net/ssh

    我已经为此苦苦挣扎了几天了 当我尝试从视图调用助手中的方法来执行 ssh 时 它会抛出该错误 加载以下文件时发生此错误 net ssh 但是当我将代码复制到test rb文件并从提示符处执行ruby test rb它连接完美 可能是什么问题
  • setInterval() 相当于 ruby

    在 JavaScript 中你可以这样做 setInterval func delay 我似乎无法在谷歌上找到任何我真正想要的东西 红宝石有等效的吗 提前致谢 你可以做类似的事情 Thread new do loop do sleep de
  • 如何在unix中对ls输出进行编号?

    我正在尝试编写一个格式为 id file absolute path 的文件 该文件基本上递归地列出文件夹中的所有文件 并为每个文件提供一个标识符 如 1 2 3 4 我可以使用以下命令递归地获取文件的绝对路径 ls d 1 PWD 但是
  • 无主键的 ActiveRecord 模型

    我有一个 ActiveRecord 模型GPA没有主键 class GPA lt ActiveRecord Base end 当我尝试打电话时GPA first to json I get TypeError false is not a
  • 葡萄错误处理策略?

    我正在使用 Grape 和 Rails 创建 REST API 我已经有了基本的架构 并且正在寻找可以 清理 东西的地方 其中之一是错误处理 处理 我目前正在修复整个 API 的 root rb GRAPE API 基类 文件中的错误 我对
  • 查找从 unix 命令行输入的单词出现的次数

    对于文件file1 txt其中包含 Apple fruit Apple tree Tree AApple AApklle Apple apple TREE Apple 我想查找该单词出现的次数Apple 输出应该是4 我的 script s
  • 使用自定义令牌进行 Firebase 身份验证

    我有一个 firebase 项目 我试图从我的 Rails 服务器进行身份验证 按照文档上的说明使用 ruby jwt 库创建自定义令牌 但我不断收到相同的错误 auth invalid custom token 自定义令牌格式不正确 请检
  • 将对象数组转换为 ActiveRecord::Relation

    我有一个对象数组 我们称其为Indicator 我想运行 Indicator 类方法 def self subjects该数组上的种类 范围等 我知道在一组对象上运行类方法的唯一方法是让它们成为 ActiveRecord Relation
  • awk 在Linux终端中输出类似表格或类似Excel的列?

    我做了一个长管子 最后是 awk print 5 t t 3 t 4 在 Linux 终端中 这些列用选项卡填充 第一列条目具有不同数量的字符 因此第二列结果并不完全垂直 怎样才能让桌子看起来更完美呢 尝试将结果通过管道传输到列 t awk
  • 使用字符串变量 **kwargs 作为命名参数

    我正在尝试找出一种方法来循环 json 配置文件并使用键名称作为使用 kwargs 的方法的参数名称 我创建了一个 json 配置文件并使用键名作为方法 我只需将 set 附加到键名称即可调用正确的方法 我将 json 转换为字典以循环遍历
  • 如何在 Rails 应用程序中选择性地跟踪方法及其文件访问?

    对于 Rails 应用程序 我想重载或修改 Kernel load 以便它打印出完整路径 例如puts gt File expand path File dirname FILE File basename FILE 对于加载的每个 Rai
  • 有没有办法在 Nokogiri css 中转义非字母数字字符?

    我有一个锚标签 file html stuff morestuff CHP 1 SECT 2 1 尝试提取 Nokogiri 中引用的内容 documentFragment at css stuff morestuff CHP 1 SECT
  • Ruby IMAP 库:如何显示文件夹中的所有邮件?

    我需要一个脚本来获取所有文件夹中的所有电子邮件 并对其及其附件进行本地备份 here https www ombulabs com blog ruby imap a comprehensive guide to interacting wi
  • 删除所有出现的重复行

    如果我想删除某些字段重复的行 那么我使用 sort u k n n 但这仍然发生一件事 如果我想删除所有出现的重复项 有没有快速的 bash 或 awk 方法可以做到这一点 例如我有 1 apple 30 2 banana 21 3 app
  • 在 VBA 中调用批处理文件无法正常工作

    我正在尝试创建一个可供其他人使用的程序 目前 我的文件位于目录中C Documents and Settings jpmccros Desktop test 该目录包含我的macro xlsm names bat 还有另一个子目录名为Dat
  • 如何在 Ubuntu 中使用 gems?

    我最近升级到 Ubuntu 9 04 但在使用 gems 时遇到问题 我使用 apt get 安装了 Ruby Rubygems 和 Rails 这rails命令确实有效 然后我安装了 capistrano 和其他 gem 例如 herok
  • 在 Rails 6 上添加外部 js 文件

    我在 app gt javascript gt packs 下创建了一个名为 custom 的文件夹 并放置以下外部 js metisMenu min js startmin js 然后在 app gt javascript gt pack
  • 用于从 Open3.popen3 标准输出中提取值的正则表达式

    如何获取外部命令的输出并从中提取值 我有这样的事情 stdin stdout stderr wait thr Open3 popen3 path foobar configfile if exit 0 wait thr value to s
  • ActiveRecord::Enum - PG::InvalidTextRepresentation:错误:整数输入语法无效:

    我遇到了一个奇怪的错误 希望有人能指出我正确的方向 我有一个名为 组织 的模型和一个名为 组织 的属性department 请参阅下面的架构摘录 t integer department default 0 在我的模型内部已经定义了这个属性
  • Rails apns 用于向 Apple ipad 推送通知 - 使用哪个 gem?

    我希望从 Rails 3 0 3 应用程序向苹果推送通知 我发现了各种 apns ish 宝石 包括 apns on rails 其中一些似乎有点旧 1 或 2 年 并且非常不清楚 2012 年使用的 当前 是什么 根据我的标准 您能推荐使

随机推荐

  • 我可以将 __func__ 替换为 C 宏中的标识符名称吗?

    我想编写一个 C 宏 它采用以下内容 int foo MY MACRO 并将其扩展为 int foo macro var foo 我发现我无法使用 func 因为它实际上并没有在宏中得到扩展 预处理器将其视为变量 有什么方法可以让它发挥作用
  • 创建 INDEX 的独特论据 - 用途是什么?

    为什么 INDEX 创建语句有 UNIQUE 参数 据我了解 非聚集索引包含一个书签 一个指向行的指针 它应该是唯一的 以区分甚至非唯一的行 那么确保非聚集索引是唯一的 正确的 那么 我是否理解非唯一索引只能在聚集表上 自从 视图上的聚集索
  • Android 共享首选项值的最大大小是多少?

    我完全理解将大量数据转储到首选项中是完全不合适的 但我的要求不是那么好 但足够大 可能 500 5000 字节 我不知道它是否合适 这些文档没有帮助 http developer android com reference android
  • 使用字符串常量通知属性已更改

    我正在使用一些现有代码 并试图找出在实现 INotifyPropertyChanged 接口时使用字符串常量作为属性名称的优点 如果有的话 例如这样做 Why use this instead of string literal in On
  • Android Studio:另一个 AAR 库中的 AAR 库依赖项

    我使用的是Android Studio 1 5 我有一个图书馆项目 核心语音服务 aar 此 AAR 文件已正确生成 所有类均在 AAR 文件的classes jar 内构建并打包 现在我正在创建另一个 AAR 库谷歌语音服务 aar这取决
  • 解析属性键中包含特殊字符的 JSON 对象

    我有一个看起来像这样的 JSON 文件 samlp Response attributes xmlns samlp urn oasis names tc SAML 2 0 protocol ID 482d7b9c 3e50 47cb aa6
  • 正则表达式回顾格式条件

    我需要帮助来制作可以匹配特定格式的正则表达式 Input FR 2 699 FR 599 3 FR 899 4 FR 3 899 5 FR 1 499 6 fr 999 Output 599899999 我努力了 1 9 d 2 但输出是
  • 在 corrplot() 中报告显着性水平

    我目前正在使用corrplot 来自corrplotR 中的包 我偶然发现了两个问题 为简单起见 我将使用与 corrplot 的帮助 介绍页面相同的符号 我想在所有单元格中记下我的 p 值或测试的显着性 或两者 而不仅仅是不显着的单元格
  • 嗯,这是新的。无法从智能手机上传照片?

    因此 我正在创建一个响应式网站 可以选择将图像上传到页面 php 脚本基本上调整图像大小并将缩略图文件路径存储在数据库中 原始图像和缩略图也存储在网站文件夹中 我正在使用 GD 库 不管怎样 我只是在测试从我的 iPhone 上传照片到网站
  • 如何捕获QWebEngineUrlRequestInterceptor拦截的请求的响应?

    我有一个带有 QWebEngineUrlRequestInterceptor 的 PyQt5 QWebEngineProfile 该拦截器使我可以在请求解析之前访问该请求 是否可以捕获每个被拦截的请求的响应 而无需手动重新提交请求 clas
  • 如何按值对 ConcurrentHashMap 进行排序?

    ConcurrentHashMap
  • 为什么 C# 中不允许使用 const 参数?

    对于 C 开发人员来说 这看起来很奇怪 在 C 中 我们通常将参数标记为const以确保其状态不会在方法中改变 还有其他 C 特定原因 例如通过const ref为了传递 ref 并确保状态不会改变 但是为什么我们不能在 C 中将方法参数标
  • 如何获取TextInput的String中的当前行数?

    输入文字后TextInput我想知道当前的行数TextInput 或者 目前数量strings也是可以的 我试过了string split n length 但是这段代码没有检测到当文本大于屏幕时该行自动递增 如何获取行数 当我在中添加此功
  • 如何使用 PowerShell 获取类提供的验证参数类

    我只想获取 IValidateSetValuesGenerator 类提供的验证参数 类似于我们使用错误参数时的返回 请参阅示例命令 Sample Verb BadVerb 下面是代码示例 class verb System Managem
  • Chrome 扩展内联安装过程

    UPDATE Google 已禁用 Chrome 扩展程序的内联安装功能 我已在我的 html 页面 我的网站被用户点击 上添加了上述代码 该代码与已在 chrome 商店和 javascript 函数中发布的 chrome 扩展相关联ch
  • 以编程方式清除 Android 地图历史记录

    我想以编程方式清除 Android 地图 和导航 应用程序的历史记录 我知道有一种方法可以清除浏览器历史记录 Browser clearSearches getContentResolver 以及相应的权限 com android brow
  • Mingw 64 下使用 wxWidgets 3.0.2 库时出现问题

    以下是我编译 wxWidgets 库的方法 下载https sourceforge net projects wxwindows files 3 0 2 wxMSW Setup 3 0 2 exe set path MINGW bin cd
  • Spring重启后没有将tomcat持久会话恢复到会话注册表?

    我正在使用 Tomcat 6 2 和 Spring MVC 2 5 我注意到 当用户登录时 我可以重新启动 Tomcat 并且用户可以继续浏览而无需重新进行身份验证 这似乎来自 Tomcat 在重新启动后保持会话的能力 然而 这些持久会话似
  • 我可以在发送电子邮件之前检查收件人是否有自动回复吗?

    我设置了一个宏 可以自动向数十名经理发送电子邮件 有时他们不在 我必须检查离开消息并手动将其转发给替补他们的人 在寻求帮助之前我会尝试找到解决方案 所以请怜悯我 我发现类似的问题但这并没有太多帮助 我找不到很多有关从草稿中的收件人提取自动回
  • Awk 的 FNR==NR 在 Ruby 中的等价物是什么?

    awk 有内置变量FNR and NR从当前文件读取的记录数 通常是行数 和总数 在 awk 中 常见的是 awk FNR NR first file lines next process remaining lines f1 f2 通常