linux - 使用 awk/sed 重新格式化长文件

标签 linux shell awk sed grep

我有一个很长的文件。文件内容如下:

myserver1
kernel_version
os

myserver2
kernel_version
os

myserver3
kernel_version
os
...

一万多个条目,每个主机3个条目。主机名、内核版本和操作系统版本。

我想要这样的输出:

myserver1, kernel_version, os
myserver2, kernel_version, os
myserver3, kernel_version, os
...

相反。那么提供此输出的最佳 awk/sed 命令是什么?

最佳答案

使用 sed:

$ sed '/^$/d;N;N;s/\n/, /g' infile                                  
myserver1, kernel_version, os                              
myserver2, kernel_version, os                              
myserver3, kernel_version, os

工作原理如下:

/^$/d       # Delete line if empty (skips rest of commands)
N           # Append second line to pattern space
N           # Append third line to pattern space
s/\n/, /g   # Replace newlines by comma and a blank

如果您希望跳过该行的标准不是“空行”而是它的行号(4、8、12 ...),您可以替换第一个命令(这是一个 GNU 扩展):

sed '4~4d;N;N;s/\n/, /g' infile

关于linux - 使用 awk/sed 重新格式化长文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339205/

相关文章:

linux - 一个用于计算按键排序的字段的平均值的单行?

c - 在 linux 上使用 od 命令有倒退吗?

python - linux cron作业使用python创建文件

shell - Npm run 在 crontab (cronjob) 中不起作用

linux - 获取 nohup R 程序完成的时间

arrays - 如何精确地将 "grep"与点 "."对齐?

regex - 删除具有特定模式的行

bash - mawk 语法适用 >1000 字段文件用于按列计算非数字数据?

c++ - 如何访问 qt 上的父窗口小部件?

python-3.x - Python/Tkinter : ModuleNotFoundError: No module named '_tkinter'