使用 awk 或 sed 连接两行

使用 awk 或 sed 连接两行

如果我有:

foo  
bar

..我想将其 awk/sed 为:

foo-bar

..语法是什么?

我正在尝试在 OS X 10.6.x 上使用系统分析器:

system_profiler SPMemoryDataType | awk '/Type/ {print $2} /Speed/ {print $2}'

输出类型速度(即 DDR-1067)。尚未弄清楚如何使用print或执行此操作printf,可能会尝试改为grep...

答案1

tr

tr '\n' '-'

这样就够了吗?这会将每个换行符替换为逗号。


sed

更漂亮的解决方案使用sed

sed -e N -e 's/\n/-/'

N根据手册页将换行符附加到模式空间:

[2addr]N

将下一行输入附加到模式空间,使用嵌入的换行符将附加的内容与原始内容分隔开。请注意,当前行号会发生变化。


bash

实际上,bash 可以做任何事tr。为了完整起见,以下是一些例子:

while read l; do echo -n "$l-"; done

Stack Overflow 上有一个类似的问题:SED:我如何替换换行符(\n)?

答案2

awk 'BEGIN {ORS="-"} {print}'

连接您的数据。begin 语句中的内容在读取数据之前发生。这里我们定义输出记录分隔符为 -。Print打印数据。

相关内容