使用 awk 将大型复杂的一列文件拆分为多列

2024-01-28

我有一个由某些商业软件生成的文本文件,如下所示。它由括号分隔的部分组成,每个部分都有数百万个元素,但具体值因情况而异。

(1
 2
 3
...
)
(11
22
33
...
)
(111
222
333
...
)

我需要实现如下输出:

 1;  11;   111
 2;  22;   222
 3;  33;   333
...  ...  ...

我发现了一个复杂的方法:

  • 执行 sed 操作得到

    1
    2
    3
    ...
    #
    11
    22
    33
    ...
    #
    111
    222
    333
    ...
    
  • 使用 awk 如下将我的文件分成几个子文件

    awk -v RS="#" '{print > ("splitted-" NR ".txt")}'
    
  • 使用 sed 再次从我的子文件中删除空格

    sed -i '/^[[:space:]]*$/d' splitted*.txt
    
  • 将所有内容连接在一起:

    paste splitted*.txt > out.txt
    
  • 添加字段分隔符(在我的 bash 脚本中定义)

    awk -v sep=$my_sep 'BEGIN{OFS=sep}{$1=$1; print }' out.txt > formatted.txt
    

当我多次循环超过百万行时,我觉得这很糟糕。 即使返回时间相当不错(~80秒),我也想找到一个完整的 awk 解决方案,但无法找到它。 就像是:

awk 'BEGIN{RS="(\\n)"; OFS=";"} { print something } '

我发现了一些相关的问题,尤其是这个使用 awk 进行行到列转换 https://stackoverflow.com/questions/19752644/row-to-column-and-column-to-row-using-awk,但它假设括号之间的行数恒定,这是我做不到的。

任何帮助,将不胜感激。


使用 GNU awk 实现多字符 RS 和真正的多维数组:

$ cat tst.awk
BEGIN {
    RS  = "(\\s*[()]\\s*)+"
    OFS = ";"
}
NR>1 {
    cell[NR][1]
    split($0,cell[NR])
}
END {
    for (rowNr=1; rowNr<=NF; rowNr++) {
        for (colNr=2; colNr<=NR; colNr++) {
            printf "%6s%s", cell[colNr][rowNr], (colNr<NR ? OFS : ORS)
        }
    }
}

$ awk -f tst.awk file
     1;    11;   111
     2;    22;   222
     3;    33;   333
   ...;   ...;   ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 awk 将大型复杂的一列文件拆分为多列 的相关文章

  • 匹配模式后添加行[重复]

    这个问题在这里已经有答案了 我有一个文件说test具有以下值 Linux Solaris Fedora Ubuntu AIX HPUX 如何在匹配 AIX 的行后面添加一行系统主机名 如果我做 echo hostname gt gt tes
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu
  • 动态参数值取决于另一个动态参数值

    启动前提 非常严格的环境 Windows 7 SP1 Powershell 3 0 使用外部库的可能性有限或不可能 我正在尝试重写之前创建的 bash 工具 这次使用 PowerShell 在 bash 中 我实现了自动完成功能 以使该工具
  • 如何查找所有以句号结尾的单词?

    我有一个包含许多以 a 结尾的单词的文件 其中大部分是缩写 例如 etc p s 如何输出一个仅显示一次所有这些单词的列表 所有单词前面都有一个空格 因此可以使用该空格来查找单词的开头 没有一个单词出现在该行的开头 文件中没有句子 因此句点
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • 对重复的名称添加双引号

    我想从文件中找到重复的名称 如下所示 并用 标记它们 file James Miki 123 456 7890 Wang Tai 234 563 6879 James Miki 123 456 7890 输出希望看起来像 James Mik
  • 为什么 $((true == false)) 在 bash 中计算结果为 1?

    为什么 bash 有以下行为 echo true false 1 我本以为这会打印0 但它打印1 以下事实使情况变得更加复杂 gt echo true 0 gt echo false 0 gt echo true true 1 gt ech
  • 将二进制输出从文件输出重定向到 stdout

    我有一个专有的二进制文件 它顽固地接受两个文件作为参数 第一个作为输入 第二个作为输出 我想 构建第一个参数 不创建临时文件 使二进制写入标准输出而不是输出文件 第二个参数 我解决了第一个问题 lt 但不确定第二个参数 我编写了以下脚本 看
  • BASH:将数据从平面文件导入模板

    我有一个平面记录文件 每行有 33 行 我需要将此文件格式化为模板中的规格 模板为 DOS 格式 源文件为 NIX 格式 该模板具有必须遵守的特定缩进和间距 我想到了几个选择 BASH 与经典的 nix 工具 sed awk grep 等
  • 最终字段可能尚未/已经初始化[重复]

    这个问题在这里已经有答案了 可能的重复 如何处理抛出检查异常的静态最终字段初始值设定项 https stackoverflow com questions 1866770 how to handle a static final field
  • 如何将 glob 表达式分配给 Bash 脚本中的变量?

    当在 bash 脚本中执行以下两行代码时 ls 会抱怨文件不存在 dirs content dev01 dev02 ls l dirs 当我使用 x 选项运行脚本时 它似乎在单引号内传递变量 这将防止通配 dirs content dev0
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • 用等号完成命令选项

    我正在尝试为可能需要表单上的长选项的命令编写一个 Bash 完成脚本 option or param value 如果用户已经在命令行上输入了一个选项 则该选项应从完成列表中排除 假设仅在命令行上指定一次给定选项才有意义 这是第一次尝试 m
  • 如何在不同目录中启动多个窗口的 tmux?

    我想使用脚本打开一个有 6 个窗口的 tmux 会话 每个窗口位于不同的目录中 我开始于我找到的一个脚本 http blog hawkhost com 2010 07 02 tmux E2 80 93 the terminal multip
  • bash循环跳过注释行

    我正在循环文件中的行 我只需要跳过以 开头的行 我怎么做 bin sh while read line do if line doesn t start with then echo line fi done lt tmp myfile 谢
  • 使用 XMLStarlet(图像注释)将值连接到现有 xml 属性

    我正在使用 xml 来注释图像 我正在使用 xmlstarlet 和 unix bash 命令 但当我尝试将值附加到现有 xml 属性值时遇到一些问题 例如 我有
  • 数组上的 Bash 子字符串扩展

    我有一组带有给定后缀的文件 例如 我有一组带有后缀的pdf文件 pdf 我想使用子字符串扩展来获取不带后缀的文件名 对于单个文件我可以使用 file test pdf echo file 0 4 要对所有文件执行此操作 我现在尝试 file

随机推荐

  • 如何在 Excel 中将列转置为行

    我有以下 Excel 工作表 A 1 foo 2 bar 3 baz 4 bam 实际上 该列要长得多 使得手动转发不成为一种选择 我怎样才能把这张纸变成 A B C D 1 foo bar baz bam 我尝试过数据透视表功能 但无法获
  • 如何在 Symfony 中延长会话 cookie 的生命周期?

    在服务器端访问会话数据时 modified time被设置 因此将其过期时间延长到未来 然而 这不会发生在PHPSESSID曲奇饼 虽然服务器端的会话数据过期时间得到延长 但 cookie 过期时间却没有延长 如果 cookie 过期 用户
  • 如何在Wordpress中隐藏模板? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有办法在管理中隐藏模板文件 例如 我有一个模板 仅在安装了特定插件后才可用 并且我已经知道如何检查插件是否处于活动状态 但是如何隐藏模板呢 例如
  • 使用 MailKit / MimeKit 从电子邮件中删除附件

    我正在使用 MailKit 库来处理电子邮件 它运行良好 但是 我试图将电子邮件拆分为其组成文件 a 主电子邮件 无附件 b 单个附件文件 以存储在文件系统上 我可以单独保存附件 但似乎无法从电子邮件正文代码中删除它们 IE 它们与主电子邮
  • 使用 Django 通道进行会话身份验证

    尝试使用 Django 通道进行身份验证 使用一个非常简单的 websockets 应用程序 该应用程序回显用户使用前缀发送的任何内容 You said 我的流程 web gunicorn myproject wsgi log file p
  • Log4j 配置和观察无法正常工作

    我在我的应用程序中使用 log4j 进行日志记录 从现在开始 我使用以下代码来配置日志记录 LogManager resetConfiguration InputStream stream Thread currentThread getC
  • Android Studio:尝试呈现 XML 布局时出现 InvalidVirtualFileAccessException

    我正在尝试在我的应用程序中预览 xml 布局 任何 xml 布局 我正在使用 Android Studio 1 5 Preview 2 我一遍又一遍地收到此错误 InvalidVirtualFileAccessException 访问无效的
  • 使用 Excel VBA 运行 SQL 查询

    我对 SQL 和 VBA 相当陌生 我编写了一个 SQL 查询 我希望能够从 Excel 工作簿中的 VBA 子程序调用和运行该查询 然后将查询结果带入工作簿中 我在网上找到了一些潜艇 stackoverflow 和其他地方 声称可以这样做
  • 寻找家谱[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为我的 Web 应用程序创建具有 HTML5 要求的家谱功能 我已经搜索并找到了一些 JS 示例 但没有找到符合我要求的 我已经尝试
  • 隐藏特定子页面上的 Ionic TabBar (IONIC 3)

    我想在多个特定页面上隐藏我的标签栏 我的主要重点是将其隐藏在我的登录页面 注册页面和评论页面上 我尝试过 tabsHideOnSubPages true 但是当我这样做时我的 UserProfile 页面 这是一个子页面 隐藏选项卡栏 选项
  • 如何在 SSL 下从 PDO 连接 MySQL

    我已经配置了MySQLubuntu 服务器中的 SSL show variables like ssl Variable name Value have openssl YES have ssl YES ssl ca etc mysql c
  • 配置 WEBUTIL 后 Oracle Form 冻结

    我正在使用 Oracle Forms 10g 它是基于 Web 的 Oracle 表单应用程序 我想从 Oracle Forms 10g 生成 Excel 报告 我配置了 WEBUTIL 并使用 CLIENT OLE2 包 在触发器 WHE
  • 查找矩阵中对角线的单词字母

    我有一个5 6的矩阵 所有的值都是英文字母 我必须在矩阵中从左到右 从右到左 从上到下 从上到对角线找到特定的单词 其实这是一个字谜 我能找到 左右 右左 上下 和 下上 这些词 当涉及到对角线查找单词时 事情会变得更加混乱 我提供了从左到
  • Ionic Framework 和 Firebase 3.x 版本:此域未获得对您的 Firebase 项目进行 OAuth 操作的授权

    我正在使用 Ionic Framework 和 Firebase 开发 iOS 应用程序 我已在我的项目中将 Firebase SDK 更新到版本 3 x 我想做的是在真实设备上使用 Facebook 对用户进行身份验证 当我在浏览器上测试
  • JpaRepository删除子元素

    我正在尝试执行一个非常简单的删除操作 但不知何故它不起作用 因为我将 DAO 更新到了 JpaRepository 基本上是这样的 A a aRepository findOne id a setSomeField someNewStrin
  • Google App Engine 为什么某些日志没有显示?

    在 Google App Engine 灵活环境中 许多日志正在跳过 并且没有显示在日志记录控制台中 并且这种情况总是发生 我正在检查它Stackdriver LoggingGoogle Cloud 仪表板上的部分 我使用的日志显示cons
  • ReactJS如何仅在向下滚动并到达页面上时渲染组件?

    我有一个反应组件Data其中包括几个图表组件 BarChart LineChart etc When Data组件开始渲染 需要一段时间才能从API接收到每个图表所需的数据 然后开始响应并渲染所有图表组件 我需要的是开始渲染每个图表only
  • 在 Vaadin 14 应用程序的服务器端通过 Java 获取用户 Web 浏览器的 IP 地址

    In 瓦丁流 https en wikipedia org wiki Vaadin Vaadin Flow 比如14 1版本 如何获取IP地址 https en wikipedia org wiki IP address用户的网络浏览器通过
  • python:生成器对象的属性

    是否可以在生成器对象上创建属性 这是一个非常简单的例子 def filter x for line in myContent if line x yield x 现在假设我有很多这样的过滤器生成器对象漂浮在周围 也许其中一些是匿名的 我想稍
  • 使用 awk 将大型复杂的一列文件拆分为多列

    我有一个由某些商业软件生成的文本文件 如下所示 它由括号分隔的部分组成 每个部分都有数百万个元素 但具体值因情况而异 1 2 3 11 22 33 111 222 333 我需要实现如下输出 1 11 111 2 22 222 3 33 3