Bash:如何从文件中读取并在一行中显示输出?

时间:2015-02-03 11:38:08

标签: bash parsing

我想跑:

grep nfs /etc/fstab | awk '{print $2}'

[root@nyproxy5 ~]# grep nfs /etc/fstab | awk '{print $2}'
/proxy_logs
/proxy_dump
/sync_logs
[root@nyproxy5 ~]#

将输出放在由空格分隔的一行中。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

如果你不介意一个空格(也没有新行),你可以使用这个awk脚本:

awk '/nfs/{printf "%s ", $2}' /etc/fstab

对于与pattern / nfs /匹配的行,将打印第二列,后跟空格。作为一般规则,将grep管道输入awk是不必要的,因为awk可以自己进行模式匹配。

如果您想在最后添加换行符,可以使用END块:

awk '/nfs/{printf "%s ", $2}END{print ""}' /etc/fstab

这将打印一个空字符串,后跟输出记录分隔符(这是一个换行符)。这意味着即使找不到匹配的记录,输出中也总是有换行符。如果这是一个问题,你可以使用一个标志:

awk '/nfs/{f=1;printf "%s ", $2}END{if(f)print ""}' /etc/fstab

如果模式匹配,则标志f设置为true,从而导致打印换行符。

答案 1 :(得分:1)

可以使用tr命令删除或替换换行符或任何其他字符:

grep nfs /etc/fstab | awk '{print $2}' | tr -c '\n' ' '

如果你想摆脱标签:

 | tr -c '\t' ' '