bash - 以 CSV 格式对每第 n 行命令输出进行分组

标签 bash csv awk sed

正在寻找一种解析多行命令输出的方法;将 nth 行的每个倍数分组并以 CSV 格式格式化。

$ cat file
ABC
123
62p4-123
DEF
456
62p4-456

我需要在每 3rd 行和 3 的倍数处对 o/p 进行分组,即第 3、6 和 9 后跟第 1、4 和 7 以及第 2、5 和 8 分别用逗号分隔格式

ABC,DEF
123,456
62p4-123,62p4-456

这只是一个示例格式,我的实际用例是一个 json o/p,我想在 bash 中使用工具/实用程序对其进行格式化,但我没有在用于解析数据的 jq 中需要一个格式化选项。

我在 awk 中找到了几种方法,比如 awk 'NR % 3 == 0' 但我不能对其他行重复此操作。

编辑:- 正在更新我从 jq 返回的实际 JSON o/p 以获得最有效的解决方案

4496
http://xxx/yyy
/home/build/branches/mmm/file1
4497
http://xxx/yyy/zzz
/home/build/branches/mmm/file1
4498
http://xxx/yyy/zzz
/home/build/branches/mmm/otherfile.c

预期的 o/p

4496,4497,4498
http://xxx/yyy,http://xxx/yyy/zzz,http://xxx/yyy/zzz
/home/build/branches/mmm/file1,/home/build/branches/mmm/file1,home/build/branches/mmm/otherfile.c

最佳答案

这里有一个更简单的方法

$ pr -2ts, file

ABC,DEF
123,456
62p4-123,62p4-456

对于另一个输入,将列数更改为 3。

$ pr -3ts, file

4496,4497,4498
http://xxx/yyy,http://xxx/yyy/zzz,http://xxx/yyy/zzz
/home/build/branches/mmm/file1,/home/build/branches/mmm/file1,/home/build/branches/mmm/otherfile.c

如果你只知道行数,不知道最终的列数你可以这样做

$ pr -$(awk 'END{print NR/3}' file) -ts, file

关于bash - 以 CSV 格式对每第 n 行命令输出进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572696/

相关文章:

php - 使用php脚本在csv文件中插入图像

php fgetcsv() 以逗号分隔符结尾的行

bash - 将一个文件的每一行与另一个文件的每一行进行比较

linux - 找到直方图的最小值

linux - 如何提取标签之间的html

linux - 如何使用正则表达式 Grep 2 文件以在行尾查找匹配项

Bash:查找所有 zip 文件,使用密码解压缩

linux - Bash - 在多个目录中添加符号链接(symbolic link)

linux - 从 sh 文件发送命令并通过 ssh 保持登录状态

powershell - 调用ConvertTo-Csv后无法将简单对象保存为CSV