如何在bash中将多行输出合并成一个以空格分隔的字符串

3
我有一个 Bash 脚本,内容如下:
while read line
do
    echo $line | while read  a b c d e f g
    do
        if [ $e != "0" ]; then
        echo -en "|'$a'=;$g;$f;;"
        fi
    done
done < /tmp/res6

这段文本指的是哪只猫

mem_total_app_1 5034876928  + 384000 = 5035260928       mysqld
mem_total_app_2 2994008064  + 108532736 = 3102540800    /usr/sbin/amavi(91)
mem_total_app_3 648744960  + 103424 = 648848384 redis-server
mem_total_app_4 541454336  + 58354688 = 599809024       php-fpm7.2(26)

并输出到这里

|'mem_total_app_1'=;mysqld;5035260928;;
|'mem_total_app_2'=;/usr/sbin/amavi(91);3102540800;;
|'mem_total_app_3'=;redis-server;648848384;;
|'mem_total_app_4'=;php-fpm7.2(26);599809024;;

我希望将输出作为一个字符串,用空格分隔。就像这样。
|'mem_total_app_1'=;mysqld;5035260928;; 'mem_total_app_2'=;amavi(91);3102540800;; 'mem_total_app_3'=;redis-server;648848384;; 'mem_total_app_4'=;php-fpm7.2(26);599809024;;

请问有人能提示我一下吗?

6个回答

2

tr '\n' ' ' 是一个不错的方法,但如果你想避免在末尾有空格,可以使用

<input_file paste -sd' '

这对使用 bc 进行计算非常方便:
<one_number_on_line paste -sd+ | bc

给出所有行的总和(每行一个数字)。


1

只需将换行符替换为空格:

tr '\n' ' ' < input_filename

1

尝试 prinft 命令

printf 命令提供了一种方法来打印预格式化文本,类似于 printf() 系统接口(C 函数)。它被设计为 echo 的继承者,并具有更多的 功能和可能性

printf "|"
while read line
do
    echo $line | while read  a b c d e f g
    do
        if [ $e != "0" ]; then
        printf " '$a'=;$g;$f;;"
        fi
    done
done  < /tmp/res6

输出:

| 'mem_total_app_1'=;mysqld;5035260928;; 'mem_total_app_2'=;/usr/sbin/amavi(91);3102540800;; 'mem_total_app_3'=;redis-server;648848384;; 'mem_total_app_4'=;php-fpm7.2(26);599809024;;

嵌套的while循环是不必要的。因为你没有对line进行任何操作,所以你可以简单地让外层的read将输入分割成a b c等等。这也顺便修复了缺少引号的问题(应该是echo "$line")。 - undefined

0

这可能不是最漂亮的方法,但你可以像这样将整个循环传递给 tr

{
    while read line
    do
        echo $line | while read  a b c d e f g
        do
            if [ $e != "0" ]; then
            echo -en "|'$a'=;$g;$f;;"
            fi
        done
    done < /tmp/res6
} | tr '\n' ' '

(注意大括号周围的空格。)


0
如果你会使用awk的话:
awk 'BEGIN{OFS=";";ORS=";; ";printf "|"}{print "\047"$1"\047",$NF,$(NF-1)}' file

脚本设置了输出分隔符OFSORS,以便可以使用;打印内容。请注意,\047是单引号字符。

0
只需简单地使用catecho命令。
cat input_filename | xargs echo

或者使用粘贴
paste -sd " " input_filename

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接