Linux终端数据处理 列表显示输出的脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux终端数据处理 列表显示输出的脚本相关的知识,希望对你有一定的参考价值。

分享一个Linux终端数据处理 列表显示输出的脚本

测试数据

# cat 123.txt 
aa  bb  cc
11  22  33
44  55  66
77  88  99



脚本出处:https://blog.csdn.net/weixin_42596911/article/details/84934113

#!/bin/bash
#################################################################
# 绘制表格
# 作者:banemon
# 邮箱:banemon@
# Git :https://gitee.com/banemon/linux_sh_script
# 命令:draw_table.sh <file.txt
# 或者:echo -e "A\\tB\\na\\tb"|draw_table.sh
# 帮助:draw_table.sh --help
# 制表符大全
# ─━│┃╌╍╎╏┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╪╫╬═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╔╗╝╚╬═╓╩┠┨┯┷┏┓┗┛┳⊥﹃﹄┌╮╭╯╰╳
# ╲╱
# ╱╲
tbc7="╭";tbc9="╮";
tbc1="╰";tbc3="╯";
tbx0="╳";
# 样式

case $style in
	# 1 2 3 4 5 6 7 8 9 10       11      12      13       14      15      16
	# 1 2 3 4 5 6 7 8 9 txt_empt top_row mid_row btm_row left_col mid_col right_col 
	-0)  tbs="                ";;
	-1)  tbs="└┴┘├┼┤┌┬┐ ───│││";;
	-2)  tbs="└─┘│┼│┌─┐ ───│││";;
	-3)  tbs="╚╩╝╠╬╣╔╦╗ ═══║║║";;
	-4)  tbs="╚═╝║╬║╔═╗ ═══║║║";;
	-5)  tbs="╙╨╜╟╫╢╓╥╖ ───║║║";;
	-6)  tbs="╘╧╛╞╪╡╒╤╕ ═══│││";;
	-7)  tbs="└┴┘├┼┤┌┬┐ ─ ─│ │";;
	-8)  tbs="└─┘│┼│┌─┐ ─ ─│ │";;
	-9)  tbs="╚╩╝╠╬╣╔╦╗ ═ ═║ ║";;
	-10) tbs="╚═╝║╬║╔═╗ ═ ═║ ║";;
	-11) tbs="╙╨╜╟╫╢╓╥╖ ─ ─║ ║";;
	-12) tbs="╘╧╛╞╪╡╒╤╕ ═ ═│ │";;
	-13) tbs="╘╧╛╞╪╡╒╤╕ ═ ═│ │";;
	-14) tbs="╚╩╝╠╬╣╔╦╗ ───│││";;
	-15) tbs="+++++++++ ---|||";;
	"%"*) tbs="$style/"%"/";;
	-h*|--h*)
		echo -e \'
 [  ---   HELP  ---  ]
\\t command : draw_table.sh [style] [colors] < <file >
\\t    pipo : echo -e A\\\\tB\\\\na\\\\tb | draw_table.sh [style] [colors]
\\t [style] : input 16 characters
\\t           1~9 is Num. keypad as table,10 is not used
\\t           11~13 are left,middle,right in a row
\\t           14~16 are left,middle,right in a column
\\t
\\t         -0  :                
\\t         -1  :└┴┘├┼┤┌┬┐ ───│││         -9  :╚╩╝╠╬╣╔╦╗ ═ ═║ ║
\\t         -2  :└─┘│┼│┌─┐ ───│││         -10 :╚═╝║╬║╔═╗ ═ ═║ ║
\\t         -3  :╚╩╝╠╬╣╔╦╗ ═══║║║         -11 :╙╨╜╟╫╢╓╥╖ ─ ─║ ║
\\t         -4  :╚═╝║╬║╔═╗ ═══║║║         -12 :╘╧╛╞╪╡╒╤╕ ═ ═│ │
\\t         -5  :╙╨╜╟╫╢╓╥╖ ───║║║         -13 :╘╧╛╞╪╡╒╤╕ ═ ═│ │
\\t         -6  :╘╧╛╞╪╡╒╤╕ ═══│││         -14 :╚╩╝╠╬╣╔╦╗ ───│││
\\t         -7  :└┴┘├┼┤┌┬┐ ─ ─│ │         -15 :+++++++++ ---|||
\\t         -8  :└─┘│┼│┌─┐ ─ ─│ │
\\t
\\t [colors]: input a list,like "-3,-4,-8" sames "-green,-yellow,-white"
\\t           It set color,table cross ,font ,middle. Or \\\\033[xxm .
\\t           And support custom color set  every characters of sytle
\\t           Like "\\\\033[30m,-red,-yellow,,,,,,,,,,,,," sum 16.
\\t
\\t          -1|-black         -5|-blue
\\t          -2|-red           -6|-purple
\\t          -3|-green         -7|-cyan
\\t          -4|-yellow        -8|-white
		\'
		exit
		;;
esac
tbs="$tbs:-"+++++++++,---|||""
 
# 颜色
color="$2"
case $color in
	1) ;;
	2) ;;
	3) ;;
	"-"*|"\\033"*)
		# 3位数标,词
		colors="$color"
		;;
	"%"*) :
		# 全自定义
		colors="$color/"%"/"
		;;
esac
colors="$colors:-"-4,-8,-4""
 
# 主体
awk -F \'\\t\' \\
	-v table_s="$tbs" \\
	-v color_s="$colors" \\
	\'BEGIN
	
		for(i=1;i<=NF;i++)
			# 每列最大长度
			cols_len[i]=cols_len[i]<length($i)?length($i):cols_len[i]
			# 每行每列值
			rows[NR][i]=$i
		
		# 前后行状态
		if(NR==1)
			befor=0
		else if(1==2)
			after=0
		
		rows[NR][0] = befor "," NF
		befor=NF
	END
		# 颜色表
		color_sum = split(color_s,clr_id,",")
		if(color_sum==3)
			# 简易自定义模式
			for(i=1;i<=3;i++)
				if(color_s~"-")
					clr_id[i] = color_var(clr_id[i])
				else if(colors~"\\033[")
					clr_id[i] = cclr_id[i]
				
			
			# 组建色表
			for(i=1;i<=16;i++)
				if(i<10)
					colors[i] = clr_id[1]
				else if(i==10)
					colors[i] = clr_id[2]
				else if(i>10)
					colors[i] = clr_id[3]
				
			
		else if(color_sum==16)
			# 全自定义模式
			for(i=1;i<=16;i++)
				if(color_s~"-")
					clr_id[i] = color_var(clr_id[i])
				else if(colors~"\\033[")
					clr_id[i] = cclr_id[i]
				
				#colors[i] = clr_id[i]
			
		
		#split(color_s,colors,",")
		clr_end = "\\033[0m"
			clr_font = colors[10]
			#clr_cross = colrs[2]
			#clr_blank = colors[3]
		# 制表符二维表并着色
		for(i=1;i<=length(table_s);i++)
			if(colors[i]=="")
				tbs[i] = substr(table_s,i,1)
			else
				tbs[i] = colors[i] substr(table_s,i,1) clr_end
			fi
		
		# 绘制上边框
		top_line=line_val("top")
		# 绘制文本行
		# 绘制分隔行
		mid_line=line_val("mid")
		# 绘制下边框
		btm_line=line_val("btm")
		# 行最大总长度
		line_len_sum=0
		for(i=1;i<=length(cols_len);i++)
			line_len_sum=line_len_sum + cols_len[i] + 2
		
		line_len_sum=line_len_sum + length(cols_len) - 1
		# 所有表格线预存(提高效率)
		title_top = line_val("title_top")
		top = line_val("top")
		title_mid = line_val("title_mid")
		title_btm_mid = line_val("title_btm_mid")
		title_top_mid = line_val("title_top_mid")
		mid = line_val("mid")
		title_btm = line_val("title_btm")
		btm = line_val("btm")
		# 绘制表格 2
		line_rows_sum=length(rows)
		for(i=1;i<=line_rows_sum;i++)
			# 状态值
			split(rows[i][0],status,",")
			befors=int(status[1])
			nows=int(status[2])
			if(i==1 && befors==0)
				# 首行时
				if(nows<=1)
					# 单列
					print title_top
					print line_val("title_txt",rows[i][1],line_len_sum)
				
				else if(nows>=2)
					# 多列
					print top
					print line_val("txt",rows[i])
				
					
			else if(befors<=1)
				# 前一行为单列时
				if(nows<=1)
					# 单列
					print title_mid
					print line_val("title_txt",rows[i][1],line_len_sum)
				else if(nows>=2)
					# 多列
					print title_btm_mid
					print line_val("txt",rows[i])
				
			
			else if(befors>=2)
				# 前一行为多列时
				if(nows<=1)
					# 单列
					print title_top_mid
					print line_val("title_txt",rows[i][1],line_len_sum)
				else if(nows>=2)
					# 多列
					print mid
					print line_val("txt",rows[i])
				
			
			# 表格底边
			if(i==line_rows_sum && nows<=1)
				# 尾行单列时
				print title_btm
			else if(i==line_rows_sum && nows>=2)
				# 尾行多列时
				print btm
			
		
	
	function color_var(  color)
		# 颜色
		#local color=$1
		#case $color in
		if(color=="-1" ||color=="-black")
			n=30
		else if(color=="-2" || color=="-red")
			n=31
		else if(color=="-3" || color=="-green")
			n=32
		else if(color=="-4" || color=="-yellow")
			n=33
		else if(color=="-5" || color=="-blue")
			n=34
		else if(color=="-6" || color=="-purple")
			n=35
		else if(color=="-7" || color=="-cyan")
			n=36
		else if(color=="-8" || color=="-white")
			n=37
		else if(color=="-0" || color=="-reset")
			n=0
		else
			n=0
		
		return "\\033[" n "m"
	
	function line_val(   part,   txt,  cell_lens,  cell_len,  line,  i)
		# 更新本次行标
		if(part=="top")
			tbs_l=tbs[7]
			tbs_m=tbs[8]
			tbs_r=tbs[9]
			tbs_b=tbs[11]
		else if(part=="mid")
			tbs_l=tbs[4]
			tbs_m=tbs[5]
			tbs_r=tbs[6]
			tbs_b=tbs[12]
		else if(part=="txt")
			tbs_l=tbs[14] tbs[10]
			tbs_m=tbs[10] tbs[15] tbs[10]
			tbs_r=tbs[10] tbs[16]
			tbs_b=tbs[10]
		else if(part=="btm")
			tbs_l=tbs[1]
			tbs_m=tbs[2]
			tbs_r=tbs[3]
			tbs_b=tbs[13]
		else if(part=="title_top")
			tbs_l=tbs[7]
			tbs_m=tbs[11]
			tbs_r=tbs[9]
			tbs_b=tbs[11]			
		else if(part=="title_top_mid")
			tbs_l=tbs[4]
			tbs_m=tbs[2]
			tbs_r=tbs[6]
			tbs_b=tbs[12]			
		else if(part=="title_mid")
			tbs_l=tbs[4]
			tbs_m=tbs[12]
			tbs_r=tbs[6]
			tbs_b=tbs[12]			
		else if(part=="title_txt")
			tbs_l=tbs[14]
			tbs_m=tbs[15]
			tbs_r=tbs[16]
			tbs_b=tbs[10]			
		else if(part=="title_btm")
			tbs_l=tbs[1]
			tbs_m=tbs[13]
			tbs_r=tbs[3]
			tbs_b=tbs[13]			
		else if(part=="title_btm_mid")
			tbs_l=tbs[4]
			tbs_m=tbs[8]
			tbs_r=tbs[6]
			tbs_b=tbs[12]			
		
		# 制表符着色
		#	tbs_l = clr_cross tbs_l clr_end
		#	tbs_m = clr_cross tbs_m clr_end
		#	tbs_r = clr_cross tbs_r clr_end
		#	tbs_b = clr_blank tbs_b clr_end
		# title行只有一列文本
		if(part=="title_txt")
			cols_count=1
		else
			cols_count=length(cols_len)
		
		line_tail=""
		for(i=1;i<=cols_count;i++)
			# 定义当前单元格内容,长度
			if(part=="txt")
				cell_tail=txt[i]
				cols_len_new=cols_len[i]-length(cell_tail)
			else if(part=="title_txt")
				# 单列居中
				cell_tail=txt
				cols_len_new = ( cell_lens - length(cell_tail) ) / 2
				cols_len_fix = ( cell_lens - length(cell_tail) ) % 2
				#print cols_len_new,cols_len_fix
			else
				cell_tail = ""
				cols_len_new = cols_len[i] + 2
			
			# 单元格文本着色
			cell_tail = clr_font cell_tail clr_end
			# 单元格内空白补全
			if(part=="title_txt")
				# 单列
				#cols_len_new=cols_len_new/2
				for(cell_len=1;cell_len<=cols_len_new;cell_len++)
					cell_tail= tbs_b cell_tail tbs_b
				
				# 单列非偶长度补全
				if(cols_len_fix==1)
					cell_tail = cell_tail " "
				
			else
				# 多列
				for(cell_len=1;cell_len<=cols_len_new;cell_len++)
					cell_tail=cell_tail tbs_b
				
			
			# 首格
			if(i==1)
				line_tail=line_tail cell_tail
			else
				# 中格
				line_tail=line_tail tbs_m cell_tail
			
			# 尾格
			if(i==cols_count)
				line_tail=line_tail tbs_r
				
		
		# 返回行
		return tbs_l line_tail
	
	\' 

如何在Linux终端里用Shell和C输出带颜色的文字

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 
格式如下: 

echo -e "\\033[字背景颜色;文字颜色m字符串\\033[0m"

例如: 

echo -e "\\033[41;36m something here \\033[0m"

字颜色:30—–37 

  echo -e “\\033[30m 黑色字 \\033[0m” 
  echo -e “\\033[31m 红色字 \\033[0m” 
  echo -e “\\033[32m 绿色字 \\033[0m” 
  echo -e “\\033[33m 黄色字 \\033[0m” 
  echo -e “\\033[34m 蓝色字 \\033[0m” 
  echo -e “\\033[35m 紫色字 \\033[0m” 
  echo -e “\\033[36m 天蓝字 \\033[0m” 
  echo -e “\\033[37m 白色字 \\033[0m”

字背景颜色范围:40—–47 

  echo -e “\\033[40;37m 黑底白字 \\033[0m” 
  echo -e “\\033[41;37m 红底白字 \\033[0m” 
  echo -e “\\033[42;37m 绿底白字 \\033[0m” 
  echo -e “\\033[43;37m 黄底白字 \\033[0m” 
  echo -e “\\033[44;37m 蓝底白字 \\033[0m” 
  echo -e “\\033[45;37m 紫底白字 \\033[0m” 
  echo -e “\\033[46;37m 天蓝底白字 \\033[0m” 
  echo -e “\\033[47;30m 白底黑字 \\033[0m”

最后面控制选项说明 

  \\33[0m 关闭所有属性
  \\33[1m 设置高亮度
  \\33[4m 下划线
  \\33[5m 闪烁
  \\33[7m 反显
  \\33[8m 消隐
  \\33[30m — \\33[37m 设置前景色
  \\33[40m — \\33[47m 设置背景色
  \\33[nA 光标上移n行
  \\33[nB 光标下移n行
  \\33[nC 光标右移n行
  \\33[nD 光标左移n行
  \\33[y;xH设置光标位置
  \\33[2J 清屏
  \\33[K 清除从光标到行尾的内容
  \\33[s 保存光标位置
  \\33[u 恢复光标位置
  \\33[?25l 隐藏光标
  \\33[?25h 显示光标

参考技术A 使用ansi颜色,如在shell中执行echo -e "\033[0;31;40mHelloWorld\033[0m",就会输出红色的HelloWorld。ansi可以控制前景色、背景色、闪烁等。
正确显示需要终端支持。

以上是关于Linux终端数据处理 列表显示输出的脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上的终端启动时运行 python 脚本[关闭]

如何在Linux终端里用Shell和C输出带颜色的文字

linux中shell用nali查询IP后比对数据输出对应的地区的脚本怎么写

在linux,怎么 查看当前目录下的内容,把查看内容保存到aaa.txt,同时显示输出

linux 图形界面下如何看到shell脚本的输出

Linux 终端:输入反馈消失,不显示换行符