Linux:将输出转换为一行

时间:2014-07-16 05:22:42

标签: linux awk sed

我在linux上运行geoiplookup命令,它提供以下内容:

[root@localhost temp]$ geoiplookup 8.8.8.8

GeoIP Country Edition: US, United States
GeoIP City Edition, Rev 1: US, N/A, N/A, N/A, 38.000000, -97.000000, 0, 0
GeoIP City Edition, Rev 0: US, N/A, N/A, N/A, 38.000000, -97.000000
GeoIP ASNum Edition: AS15169 Google Inc.

我希望输出在一行上并尝试过:

[root@localhost temp]$ geoiplookup 8.8.8.8 | sed '2,3d' | sed 's/^.*: /,/g' | sed '$!{:a;N;s/\n/\t/;ta}' | awk -F ',' '{print $4","$2}'
AS15169 Google Inc.,US

很抱歉让你误会。我想用更简单的方法将国家代码和ASNum保持为输出行。

与“AS15169 Google Inc.,US”一样

4 个答案:

答案 0 :(得分:1)

粘贴命令可以执行您想要的操作。

geoiplookup 8.8.8.8 | paste -sd " "

另见How do I remove newlines from a text file?

答案 1 :(得分:1)

geoiplookup 8.8.8.8 | awk '/^GeoIP Country/{ sub(/,*$/, "", $4); c = $4; } sub(/^GeoIP ASNum Edition: /, ""){ print $0 "," c }'

预期产出:

AS15169 Google Inc.,US

编辑:sub就足够了。无需转gsub

答案 2 :(得分:0)

这适合你吗?

geoiplookup 8.8.8.8 | sed '2,3d' | sed 's/^.*: /,/g' | sed '$!{:a;N;s/\n/\t/;ta}' | awk -F ',' '{print $8","$2}'

答案 3 :(得分:0)

一种非常简单的技术是:

echo $(geoiplookup 8.8.8.8)

请注意$(…)命令替换周围没有双引号 - 与Capturing multiple line output to a bash variable形成对比。