我有一个包含 36 行的输入,如下所示:
822
526006
1343315205
1.4.2
32
0.000000
13.048815
...
0
0
0
那是 memcache stats 命令的输出。所以它不是来自文件。如何将这些行转换为单行的列。我不想使用临时文件。
谢谢,
我有一个包含 36 行的输入,如下所示:
822
526006
1343315205
1.4.2
32
0.000000
13.048815
...
0
0
0
那是 memcache stats 命令的输出。所以它不是来自文件。如何将这些行转换为单行的列。我不想使用临时文件。
谢谢,
试试这个:
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
您可以在没有 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
anuj@test:~$ cat num
1
2
3
4
5
anuj@test:~$ cat num |xargs
1 2 3 4 5
anuj@test:~$
我猜 cat 和 xargs 绰绰有余
可以是单字符awk
程序
seq 10 | awk -v ORS=" " 1
使用sed
input | sed ':a;N;{s/\n/ /};ba'
在 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
请注意,最后一个回显是为了避免您的提示出现在同一行,如果您在脚本中相应地使用它,请删除。