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[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 显示光标
正确显示需要终端支持。
以上是关于Linux终端数据处理 列表显示输出的脚本的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 上的终端启动时运行 python 脚本[关闭]
linux中shell用nali查询IP后比对数据输出对应的地区的脚本怎么写