如何使用sed或awk在单行中排列单词?

时间:2014-12-10 07:15:46

标签: awk sed

我的文件内容:

Google
Facebook
yahoo
cisco
juniper
oracle
firetide
attack

我想将上面的单词(列)转换为一行,如下所示:

Google Facebook yahoo cisco juniper oracle firetide attack

注意:每个单词之间应该有一个空格。

请建议我使用sed或awk实现此目的。

提前致谢。

6 个答案:

答案 0 :(得分:5)

使用shell

如果允许使用shell解决方案,请尝试:

$ echo $(cat inputfile) 
Google Facebook yahoo cisco juniper oracle firetide attack

以上内容适用于任何POSIX shell。使用bash

$ echo $(<inputfile) 
Google Facebook yahoo cisco juniper oracle firetide attack

使用sed

如果我们真的必须使用awksed,那么这是一个sed解决方案:

$ sed ':a;N;$!ba; s/\n/ /g' inputfile
Google Facebook yahoo cisco juniper oracle firetide attack

以上内容读取(:a;N;$!ba)中的整个文件,然后用空格(s/\n/ /g)替换所有换行符。

如果输入文件在行尾可能包含额外的空格,我们可以删除它们:

$ sed ':a;N;$!ba; s/[[:space:]]*\n[[:space:]]*/ /g' inputfile
Google Facebook yahoo cisco juniper oracle firetide attack

答案 1 :(得分:2)

使用awk

$ awk 'ORS=FS' inputFile
Google Facebook yahoo cisco juniper oracle firetide attack 

另一种变化是

$ awk 1 ORS=' ' input
Google Facebook yahoo cisco juniper oracle firetide attack

答案 2 :(得分:1)

这是另一种方法:

xargs <file
Google Facebook yahoo cisco juniper oracle firetide attack

这与最后发布的awk不同,最后也会提供换行符。

答案 3 :(得分:0)

使用tr

tr '\n' ' ' < File

答案 4 :(得分:0)

使用awk:

awk '{printf "%s ", $0}' file

答案 5 :(得分:0)

sed -n '1h;1!H;${x;s/ *\n */ /gp;}' YourFile
  • 用简单的空格替换起始/结束空间和新行(因此将删除任何起始空间)。