如何将行输出为一个以空格分隔的字符串(bash)

时间:2018-06-12 09:13:34

标签: string bash line

我在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;;

有人可以提示我吗?

5 个答案:

答案 0 :(得分:1)

尝试prinft命令

printf命令提供了一种打印预格式化文本的方法,类似于printf()系统界面( C函数)。它的意思是successor for 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;;

答案 1 :(得分:0)

只需用空格替换换行符:

tr '\n' ' ' < input_filename

答案 2 :(得分: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' ' '

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

答案 3 :(得分:0)

tr '\n' ' '是一种很好的方式,但是如果你想避免在最后有空格,请使用

<input_file paste -sd' '

这对于使用bc进行计算非常方便:

<one_number_on_line paste -sd+ | bc

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

答案 4 :(得分:0)

如果您可以使用awk

awk 'BEGIN{OFS=";";ORS=";; ";printf "|"}{print "\047"$1"\047",$NF,$(NF-1)}' file

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