3

我有一个包含 36 行的输入,如下所示:

822
526006
1343315205
1.4.2
32
0.000000
13.048815
...
0
0
0

那是 memcache stats 命令的输出。所以它不是来自文件。如何将这些行转换为单行的列。我不想使用临时文件。

谢谢,

4

6 回答 6

10

试试这个:

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 
于 2012-07-26T16:19:08.483 回答
6

您可以在没有 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
于 2012-07-26T16:22:15.080 回答
4
anuj@test:~$ cat num
1
2
3
4
5
anuj@test:~$ cat num |xargs
1 2 3 4 5
anuj@test:~$

我猜 cat 和 xargs 绰绰有余

于 2012-11-20T09:19:11.553 回答
2

可以是单字符awk程序

seq 10 | awk -v ORS=" " 1
于 2012-07-26T18:18:47.113 回答
1

使用sed

input | sed ':a;N;{s/\n/ /};ba'
于 2012-07-26T16:25:00.963 回答
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

请注意,最后一个回显是为了避免您的提示出现在同一行,如果您在脚本中相应地使用它,请删除。

于 2016-07-14T00:09:03.333 回答