我的文件内容:
Google
Facebook
yahoo
cisco
juniper
oracle
firetide
attack
我想将上面的单词(列)转换为一行,如下所示:
Google Facebook yahoo cisco juniper oracle firetide attack
注意:每个单词之间应该有一个空格。
请建议我使用sed或awk实现此目的。
提前致谢。
答案 0 :(得分:5)
如果允许使用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
如果我们真的必须使用awk
或sed
,那么这是一个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