linux - bash 合并文件中的行

标签 linux bash shell sed awk

我想转换这个文本:

qa-ops01.mysite.com
/dev/mapper/sys-home   58G   26G   30G  47% /home
/dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /tmp
qa-ops02.mysite.com
/dev/mapper/sys-home   58G   26G   30G  47% /usr
/dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /var
qa-ops03.mysite.com
/dev/mapper/sys-home   58G   26G   30G  47% /lib
/dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /etc

这个:

qa-ops01.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /home
qa-ops01.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /tmp  
qa-ops02.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /usr
qa-ops02.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /var   
qa-ops03.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /lib
qa-ops03.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /etc

我用过

cat FILE |sed 'N;s/.com\n//'

有没有办法实现这个,或者我应该只写 If...Then...

谢谢大家的回答 :D(你总是给我看新东西 :D)

最佳答案

answer通过 potong几乎是正确的;它只处理一台服务器,而不是多台服务器,但所需的更改很小。

$ sed -e '/^[^ ]*$/{h;d;}' -e 'G; s/\(.*\)\n\(.*\)/\2 \1/' data
qa-ops01.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /home
qa-ops01.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /tmp
qa-ops02.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /usr
qa-ops02.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /var
qa-ops03.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /lib
qa-ops03.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /etc
$

脚本分为两部分,由两个 -e 选项标识。第一部分标识服务器名称;这些行不包含空格(因此 /^[^ ]*$/ 查找没有空格的行),并将该行复制到保留空间 (h) 和然后删除它 (d) 并继续下一行。脚本的第二部分仅在包含空格的行上运行。它在换行符 (G) 之后将保持空间的内容附加到模式空间;然后它将这一行拆分为“直到换行符的所有内容”和“换行符之后的所有内容”,并切换它们以便“之后”(\2) 先出现,然后是空格,然后是“之前”(\1)。

这使用经典的 sed 正则表达式;它在 Mac OS X (10.7.5) 上使用 BSD sed 和 GNU sed 进行了测试,没有任何变化。 GNU sed 具有诸如 -r 之类的选项来更改正则表达式的解释,这将为您节省一些反斜杠。

关于linux - bash 合并文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483341/

相关文章:

linux - Hook 系统调用ubuntu

c++ - C/C++ Windows 或 Linux 将随机内存块映射为连续顺序

linux - 我可以运行使用 2 个不同命令行的脚本吗?

linux - 多个 ssh 命令中的 cat 不起作用

bash - 并行计算日志,如何防止交错写入? lockfile 还是 flock?

linux - 在 Bash 脚本中引发错误

c - 为什么用户的输入会在终端上回显?

bash - 从多个 mp4 文件中批量提取帧

linux - 将命令传递到使用 bash 脚本运行 shell 的二进制文件中

git - shell 脚本如何从外部编辑器获取输入(就像 Git 那样)?