在linux中,我们经常需要把多项数据或内容打印输出为一行,用空格或其他分隔符分开。有时,又需要把输出按列显示。特殊情况下,需要由一种显示方式转换为另一种。
一、显示与输出
1.数字序列显示
1 2 3 4 5…这是一行显示。
1
2
3
4
5
这是按列显示。
2.文件输出
默认按行输出,由换行符(用\n表示)控制
输出时,如遇到换行符,就会另起一行
3.打印输出命令
echo bash默认把参数打印输出到屏幕
print 通用打印输出命令,根据解释器或编译器的不同,有不同的含义
printf 与print相同,也是常用打印输出命令,具有格式化输出的含义
在centos7系统中,shell默认采用bash,主要使用echo打印输出。
echo 123456 默认按行输出,如需要换行,加选项,设置\n
案例:
echo 123456
echo -e “123\n456”
选项:-e 开启转义 -n 不换行
二、行列显示技巧
1.选择合适的命令
数字序列显示时,执行不同命令会产生不同效果。根据需要选用命令。如执行echo {1..5}时输出显示在一行;如执行seq 5时输出显示为一列,每个数字一行。
文件列表显示
ls 按行显示
find按列显示
2.echo命令改变行列输出
默认按行输出
echo hello
hello
echo -e "h\ne\nl\nl\no"
-n 按行显示
\n换行输出
合理规划选项与参数,可以有效控制屏幕输出格式。行列显示随心所欲。
3.xargs命令改变行列输出
echo是标准输入时随时改变选项,达到预期的输出效果。自己需要多少行多少列,本人自由控制。
而对于已存在的文件,在创建编辑文件时就已确定。如何调节行列输出与显示呢?这就需要用到xargs命令。
a.列转行
xargs命令是改变已存在的文件的输出格式。“cat 文件名”是根据文件的行分隔符输出显示在屏幕上。如想改变一下,想把所有行合并为一行,就可以使用管道及xargs命令。
cat 文件名 |xargs
由按行显示一列→全部按空格分隔显示为一行
b.行转列
通过xargs命令可以把一列内容转为一行,同样也可以把一行内容转为一列。
echo {1..5} |xargs -n1
由一行转为一列
-n1选项中,-n是指定转化列数,1就是转为1列。如果-n2就是转为2列,等等。
4.sed命令改变行列输出
sed是文本处理中很重要的工具,按行处理数据,增删改查。如要求仅仅是把两行合并为一行,就非常方便。
如果对sed的模式空间与保持空间有所了解,就能理解下面的命令:把一列转为一行并用不同的连接符。
此方法仅供参考。
5.awk命令改变行列输出
awk、sed和grep是处理文本文件的三大利器,通称为linux三剑客。
与sed一样,awk按行处理数据,把行中数据根据分隔符分离为多个域(或称字段field)。数据输入与输出都由格式符(称为环境变量)控制,改变格式符就可以改变行或列的输出。
修改输出格式,就是修改输出行分隔符。默认是以\n作为一行的结尾。如果不需要换行符,就可以设置为空格。
ORS=" " 按列输出→一行显示。仍以seq 1 10为例。
小结
1.如果在标准输入时设置好选项与参数,echo命令可以满足我们对行或列的输出需要。
2.查看文本文件时,需要转换行或列时,利用xargs命令就可以搞定。
3.如果想把显示的行列输出内容另存为一个文件,可以利用重定向功能。
4.对文本的高级编辑与输出,需要sed与awk命令,按自己的要求设计出复杂的格化输出。