awk 中的矩阵加法

2023-12-05

我有一堆变量,如下所示:

(DURATION 1.57) + (DURATION 2.07)
(T0 10) (T1 0) (TX 0) + (T0 12) (T1 0) (TX 1)
(TC 1) (IG 0) + (TC 2) (IG 3)

是否可以让 awk 处理这个结果,结果是:

(DURATION 3.64)
(T0 22) (T1 0) (TX 1) 
(TC 3) (IG 3) 

或者有人可以推荐另一个我可以用来做到这一点的unix程序吗?


这是一种方法:

awk '{
    gsub(/[()+]/, "")
    for(nf=1; nf<=NF; nf+=2) {
        flds[$nf] += $(nf+1)
    }
    sep = ""
    for(fld in flds) {
        printf "%s(%s %g)", sep, fld, flds[fld]
    sep = FS
    }
    print "";
    delete flds
}' file
(DURATION 3.64)
(T0 22) (T1 0) (TX 1)
(TC 3) (IG 3)
  • 我们删除特殊字符()+ using gsub()功能。
  • 我们迭代所有字段,将变量添加到数组中并添加值
  • 我们迭代数组,以我们想要的格式打印它们。
  • 打印完成后添加新行
  • 删除数组,以便我们可以在下一行重新使用它
  • Note:行的顺序将与输入文件相同,但使用in运营商为我们for loop每行上的变量可能以随机顺序出现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

awk 中的矩阵加法 的相关文章

  • 在目录和子目录中搜索文件中的模式

    在Linux中 我想搜索给定目录及其子文件夹 文件以查找某些包含和排除模式 find apps exec grep performance v warn dev null 这与搜索所经过的大量行相呼应 我不想这样 我想找到包含性能但不包含警
  • 从命令行查找并替换多行文本

    我正在尝试使用还执行其他操作的脚本编辑配置文件 该脚本需要找到某些连续的文本行并将其删除 它需要在适当的位置粘贴一个新配置 该新配置从旧配置所在的同一行开始 在新旧配置中 空间的使用都很重要 在 configfile php 中 此文本块
  • 使用 awk 读取串行输入,插入日期

    我正在尝试重新格式化串行输入 该输入由两个用逗号分隔的整数组成 从 Arduino 发送 1 2 3 4 0 0 0 1 我想在每行后面附加日期 用制表符分隔所有内容 到目前为止 这是我的代码 cat dev cu usbmodem3d11
  • bash while 循环没有按预期工作

    我知道从技术上讲 它可能会按原样工作 并且这是人们所期望的bash语言 但这不是我所期望和写的 我试图让一切尽可能简单 This is fileA Name Status Networks Image Plans HostName A PA
  • 对文本文件中的行进行分组并将相应的行聚合到列

    对文本文件中的行进行分组并将相应的行聚合到列 现有文本文件 John Life John Temp John Admin Peter Life Peter Admin Matt Life Matt Admin Matt Temp 所需输出
  • 使用 join/awk/sed 合并 CSV 文件

    您能帮我找到 bash 命令 该命令会将以下 cvs 文件 template csv file1 csv file2 csv file3 csv fileX csv 加入 合并到 ouput csv 中吗 对于 template csv 中
  • 使用 awk(或熟悉的)将多行合并为 1 行

    我需要将 nmap 输出中的多行合并为一行 FROM Nmap scan report for example com 22 tcp open ssh 80 tcp open http 111 tcp open rpcbind 1720 t
  • awk 有条件地组合多行

    我想将多行不同长度的值合并到一行 如果它们与 ID 匹配 输入示例是 ID Value a 1 49 a 2 75 b 1 120 b 2 150 b 3 211 c 1 289 d 1 301 d 2 322 所需的输出示例是 ID Va
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 创建带小数秒的时间戳

    awk可以使用 strftime 函数生成时间戳 例如 awk BEGIN print strftime Y m d H M S 2019 03 26 08 50 42 但我需要一个带有小数秒的时间戳 最好是纳秒 gnu date可以用 N
  • 如何在bash中仅提取两个字符串之间多行的第一个实例?

    我的文件是 abc 123 xyz abc 675 xyz 我想提取 abc 123 xyz 123 可以是任何东西 重点是我想要第一次出现 我尝试使用这个 sed n abc xyz p filename 但这给了我所有的例子 我怎样才能
  • 如何在正则表达式之后打印单词但不打印相似的单词?

    我想要一个 awk 或 sed 命令来打印正则表达式之后的单词 我想找到一个单词后面的单词 但不是看起来相似的单词 该文件如下所示 somethingsomething X Windows Icon xournal somethingsom
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 如何让“grep -zoP”单独显示每个匹配项?

    我有一个此表格的文件 X this is the first match blabla X this is the second match and here we have some fluff 我想提取 X 之后和相同标记之间出现的所有
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 如何删除最后一次出现模式后的所有行?

    我想删除最后一次出现模式之后的所有行 除了模式本身 file txt honor apple redmi nokia apple samsung lg htc file txt 我想要什么 honor apple redmi nokia a
  • 使用正确的头打印文件名

    我想获取当前目录中的文件名 使得文件的第一行等于myWord 我想结合find type f命令与 exec选项与head 1 filename但无济于事 有没有一些聪明的 单行的解决方案来解决这个问题 您可以使用find with awk
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 使用 awk 读取文件并搜索另一个文件

    我正在读取一个文件 每行都有数字 我需要搜索另一个满足这些数字和其他条件的文件 我正在尝试使用 awk 来做到这一点 但遇到了问题 File a txt 1476 1477 1497 现在我需要打印第 12 列包含这些数字的行以及第 3 列

随机推荐