使用 shell 迭代文件

2024-01-11

我有两个输入文件。每行都有名单、mm:dd 形式、使用持续时间和其他主机名内容。另一个是我生成的,每行都有一组不重复的名单。 我正在尝试编写一个 shell 命令来遍历带有名单的文件,将它们存储为变量并检查其他文件以匹配名称,然后输出每个人的总使用持续时间,然后输出一个包含和信息。无论如何我可以使用 awk 或其他东西来完成这项工作吗?

我想到了命令: 对于 $(cat namelist) 中的单词;执行 echo $word;完毕 但这仅适用于迭代一个文件。 我想做的是这样的:

for word in namelist.txt:
 for words in info_file.txt (field $1):
   if word == words:
     (calculating usage of time) 
     print(word, ':', usage of time)

我已经弄清楚了计算时间使用情况的代码。我现在的问题是如何进行这个操作。 有人可以帮忙吗?

-----------------进一步说明 所以我有一个文件,其中包含用户登录主机所花费的时间信息,每一行都有名称、日期(mm:dd:hh:mm)、初始时间、结束时间、持续时间和主机名信息。 我想要实现的是输出一个以每月为标题的文件(例如:[四月]),然后计算每个登录主机的用户的持续时间。他们可能有多次登录,因此他们的名字与每行中的其他信息一起出现多次。我生成了这个文件,其中包含过去半年内登录的所有用户名。我正在尝试生成以每个月份名称作为标题的输出文件,并按月份分组,然后将文件中的名称与我生成的名单进行匹配,以计算其持续时间并将其打印到同一行的输出文件中印有他们的名字。我已经弄清楚如何进行计算了。所以现在让我困惑的是如何执行匹配名称的步骤

输入文件:

sdou     pts/11       Thu Dec 10 05:24 - 12:11 (2+06:46)    131.243.186.99
sdou     pts/10       Thu Dec 10 05:04 - 12:11 (2+07:06)    131.243.186.99
sdou     pts/9        Thu Dec 10 03:26 - 12:11 (2+08:45)    131.243.186.99
ermartin pts/0        Sat Dec 12 12:37 - 13:44  (01:06)     c-24-130-14-154.hsd1.ca.comcast.net
ermartin pts/0        Sat Dec 12 12:18 - 12:31  (00:13)     c-24-130-14-154.hsd1.ca.comcast.net

示例输出:

[Dec]
sdou 94.xxxhours
ermartin 1.19hours

我认为这就是你想要的(使用 GNU awk 4.* 来实现真正的多维数组):

$ cat tst.awk
{
    n = split($9,t,/[()+:]/)
    hours = t[n-3]*24 + t[n-2] + t[n-1]/60
    tot[$4][$1] += hours
}
END {
    for (month in tot) {
        print "["month"]"
        for (user in tot[month]) {
            print user, tot[month][user] "hours"
        }
    }
}

$ awk -f tst.awk file
[Dec]
sdou 166.617hours
ermartin 1.31667hours

但输出数字与您的预期值不匹配:

[Dec]
sdou 94.xxxhours
ermartin 1.19hours

我花了很多时间试图找出它们不同的原因,但我做不到。抱歉,无论如何希望这会有所帮助。

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

使用 shell 迭代文件 的相关文章

  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 迭代哈希数组

    我编写了下面的例程 迭代哈希值 0 7 并打印出每个哈希值中特定键的值 我需要获取每个哈希中 b4 的值 我想取消 0 7 当存在不同数量的哈希值时使用更智能的东西 例如 有时只有 2 个 也可能有 160 个 my out decode
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • Path::Class::File 或 ::Dir & Moose 初始化和强制

    目前有 package Local use warnings use Moose use Method Signatures Simple use Path Class File use Path Class Dir method buil
  • 关键字“if”如何测试一个值是真还是假?

    在 bash 脚本中 if 1 then echo Yes else echo No fi Output Yes 它表示 1 被视为真值 但在代码中 word Linux letter nuxi if echo word grep q le
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • Perl YAML 模块无法识别标量类型

    我加载以下 yaml 文件 foo bar s 1 hx 0x34 用这段代码 use YAML qw LoadFile Dump use Data Dumper my d LoadFile test yaml print Dumper d
  • Bash:递归复制命名文件,保留文件夹结构

    我希望 cp R src prog js images icon jpg tmp package 将在目标目录中产生对称结构 tmp package src prog js images icon jpg 但相反 这两个文件都被复制到 tm
  • AWK:递归下降 CSV 解析器

    响应一个BASH 中的递归下降 CSV 解析器 https codereview stackexchange com questions 11727 need some advice or help with translation and
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 根据插入顺序迭代哈希?

    不想对条目进行排序 使用它也不会保留顺序 foreach my val keys hash 默认情况下 Perl 5 中的哈希值是无序的 您可以使用tie http perldoc perl org functions tie html a

随机推荐

  • 使用 Spring 注解注入父类依赖的正确方法

    我有以下代码 Dao java Component public class Dao extends NamedParameterJdbcDaoSupport dbContext xml
  • 使用 Python 频繁更新数值实验的存储数据 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在运行一个需要多次迭代的数值实验 每次迭代之后 我想将数据存储在 pickle 文件或类似 pickle 的文件中 以防程序超时或数据结构被
  • Angular 2 模型绑定(对象数组)

    我是 Angular2 的新手 我的问题很简单 我想绑定一个对象数组 如下所示 我有以下组件 app ts 和视图 cart html 应用程序 ts 文件 Component selector my app templateUrl Par
  • 如何使用组合观察数组的新值?

    如果我有一个数组 var arr 0 1 2 以及它的联合出版商 arr publisher sink completion in print Completed with completion receiveValue val in pr
  • Windows Server 2008 R2 上的 WPF 样式

    我有一个 WPF 程序 它在 Windows 8 1 和 Windows Server 20008 R2 上的样式完全不同 下图显示了每个操作系统的示例 左侧为 Windows 8 右侧为 Server 2008 R2 该程序是使用 NET
  • 无法在本地主机上的 docker 容器之间进行通信

    首先 我是 docker 容器的新手 我不太了解它们是如何运行的 但我有这样的设置 一个用于 NET Core API 的 Docker 容器 由 VS 2019 自动生成的 Docker 文件 用于 Angular 9 应用程序的一个 D
  • 如何以编程方式隐藏高图表中的工具提示?

    我正在尝试在移动应用程序中实现高图表 一切正常 但存在一个问题 即在将方向从肖像更改为风景时 为任何选定点显示的工具提示不会在方向更改时隐藏 请建议我如何在高图表中以编程方式隐藏工具提示 我尝试了下面的代码 tankActualUsagec
  • 如何将单选按钮名称列表传递给 spring 控制器并将它们显示到成功页面

    我在选择时有一个单选按钮列表 我遇到了以下代码的一个问题 因为我只在 js 函数中为其他人获取第一个单选按钮的值 我的意思是除了第一个单选按钮之外 它给出了 null PFB代码 tr td td tr
  • Xcode 8 和模拟器 10 上的 3D Touch

    我读过一篇ton https stackoverflow com questions 32491188 simulate force touch 3d touch on iphone 6s or iphone 6s plus simulat
  • ANTLR4 中预期存在无关输入“-”

    你能告诉我可能是什么问题吗 值得期待的是
  • 如何检查 Android 设备是否已连接到网络?

    我如何知道我的设备是否已连接网络 我如何检测连接性 有示例代码吗 首先 您需要获得许可才能知道设备是否已连接到网络 这需要出现在您的清单中
  • 如何在不使用递归的情况下故意触发StackOverflowException?

    有人告诉我每个方法都有一个大小为 1mb 的堆栈 所以我假设在一个方法中初始化 256 个整数值将导致 StackOverflowException 我在代码中尝试过 但没有引发异常 那么 如何在不使用递归的情况下故意触发StackOver
  • 企业库日志记录未从 ASP.NET 记录到事件日志

    我花了一天时间尝试使 Ent Lib Logging 工作并将所有内容记录到数据库或事件日志中 我有一个具有相同 Ent Lib 配置的 Web 应用程序和控制台应用程序 但只有控制台应用程序能够登录事件日志 我尝试了所有具有权限的操作 但
  • boto 和“In”比较器

    我正在尝试将 In 比较器与 boto 一起使用来指定 Mechanical Turk 作业的多个区域设置 这个答案 https stackoverflow com a 25122804 1599229说这是可能的 也是如此AMT 文档 h
  • Socket.Shutdown 抛出 SocketException

    我正在尝试为我的项目实现异步套接字 这是代码 public void Start int listeningPort var ipHostInfo Dns Resolve Dns GetHostName var ipAddress ipHo
  • 正则表达式蛋白质消化

    因此 我正在用一种酶 出于你的好奇心 Asp N 消化蛋白质序列 该酶在单字母编码序列中 B 或 D 编码的蛋白质之前进行切割 我的实际分析使用String scan用于捕获 我试图找出为什么以下正则表达式不能正确消化它 w BD b 先行
  • 如何在vscode终端中将i386 arch更改为arm64?

    如何在vscode终端中将i386 arch更改为arm64 m2 Pro 硅 我问因为yarn and npm无法在 vscode 终端中工作 但在外部终端 iterm2 终端 中完美工作 vscode 终端 https i stack
  • Rust 链接器寻找 LIB,而不是 DLL

    我正在 Windows 上尝试 Rust 我的代码声明并调用外部库中的函数 声明是这样的 link name Rvea0326nc 64 extern C fn WeibullSpeedProbability wa f32 wk f32 q
  • 无休止的动画、requestAnimationFrame 和调用堆栈限制

    我正在开发一个小项目 该项目使用 Twitter 流 API 并从中制作一些画布动画 鉴于 Twitter 流 API 没有结束 动画可能会无限期地继续下去 问题就在于此 requestAnimationFrame似乎是通过递归进行操作的
  • 使用 shell 迭代文件

    我有两个输入文件 每行都有名单 mm dd 形式 使用持续时间和其他主机名内容 另一个是我生成的 每行都有一组不重复的名单 我正在尝试编写一个 shell 命令来遍历带有名单的文件 将它们存储为变量并检查其他文件以匹配名称 然后输出每个人的