我在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;;
有人可以提示我吗?
答案 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
该脚本设置输出分隔符OFS
和ORS
,以便它可以使用;
打印内容。请注意,\047
是单引号字符。