我的输入包含36行,如下所示:
822
526006
1343315205
1.4.2
32
0.000000
13.048815
...
0
0
0
这是memcache stats命令的输出。所以它不是来自文件。如何将这些行转换为单行的列。我不想使用临时文件。
谢谢,
答案 0 :(得分:9)
试试这个:
awk '{printf("%s ", $0)}'
使用管道:
whatever_your_command | awk '{printf("%s ", $0)}'
使用printf()
的优点是它可以让您完全控制数据的输出格式/间距/等。
-
测试
822
526006
1343315205
1.4.2
32
0.000000
13.048815
文件data.txt
中的数据:
awk '{printf("%s ", $0)}' data.txt
的产率:
822 526006 1343315205 1.4.2 32 0.000000 13.048815
答案 1 :(得分:5)
你可以不用awk这样做:
tr '\n' ' ' < file
echo $(<file)
xargs echo < file
perl -pe 's/\n/ /' < file
示例:
$ tr '\n' ' ' < data.txt
822 526006 1343315205 1.4.2 32 0.000000 13.048815
$ echo $(<data.txt)
822 526006 1343315205 1.4.2 32 0.000000 13.048815
$ xargs echo < data.txt
822 526006 1343315205 1.4.2 32 0.000000 13.048815
$ perl -pe 's/\n/ /' < data.txt
822 526006 1343315205 1.4.2 32 0.000000 13.048815
答案 2 :(得分:4)
anuj@test:~$ cat num
1
2
3
4
5
anuj@test:~$ cat num |xargs
1 2 3 4 5
anuj@test:~$
cat和xargs绰绰有余我想
答案 3 :(得分:2)
它可以是单个字符awk
程序
seq 10 | awk -v ORS=" " 1
答案 4 :(得分:1)
使用sed
input | sed ':a;N;{s/\n/ /};ba'
答案 5 :(得分:0)
在bash中,你可以使用这样的东西。
input="822
526006
1343315205
1.4.2
32
0.000000
13.048815"
然后使用简单的for循环。
for row in $(echo "$input");do echo -en "$row ";done;echo
输出
822 526006 1343315205 1.4.2 32 0.000000 13.048815
请注意,最后一个回显是为了避免将提示放在同一行,如果在脚本中相应地使用它,则删除。