如何使用awk将行转换为列?

时间:2012-07-26 16:17:04

标签: awk

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

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

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

谢谢,

6 个答案:

答案 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

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