其实运维工作中经常会遇到整理一些表格的问题 ,比如领导要看服务器资源,配置,或者k8s容器资源使用率之类的(非技术类总监可能一时半会看不懂监控大屏 这个时候excel相对是比较直观,相对) 也会使用一些shell脚本 批量返回数据手动往excel里面粘贴
需求
电商平台的一些sku数据 ,组合sku字段有5行数据相同,平台sku 要复制一份左边的sku和下面三个固定的商品,还有一个是截取值.下面的效果就是最终效果
b.txt # 存放商品组列表中sku
可以从数据库里导出sku表
[root@node1 ~]# vim b.txt
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nana
ACCS1793-CARD982-ZT617-C4002-15-Nan
ACCS1793-CARD982-ZT617-C4002-15-Nanna
ACCS1793-CARD982-ZT617-C4002-15-Grammy
ACCS1793-CARD982-ZT617-C4002-15-Mimi
ACCS1793-CARD982-ZT617-C4002-15-Granny
ACCS1793-CARD982-ZT617-C4002-15-Grandmother
....
需要对该内容进行重复输出5次
脚本:
[root@node1 ~]# for i in `cat b.txt`;do echo $i;echo $i ;echo $i;echo $i;echo $i;done
注释: b.txt文件名可以自定义 ,在for循环中 文件名需要与自己定义的一致 其他脚本同理 不做过多赘述
#实现效果:
[root@node1 ~]# for i in `cat b.txt`;do echo $i;echo $i ;echo $i;echo $i;echo $i;done
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Grandma
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nanny
ACCS1793-CARD982-ZT617-C4002-15-Nana
...
附赠商品sku 其一 :
[root@node1 ~]# sed -e "s/$/ \nrongbudaizi\nguanhua-Orange\nBox-Khaki-9*9*3-001\n/" b.txt
效果展示:
[root@node1 ~]# sed -e "s/$/ \nrongbudaizi\nguanhua-Orange\nBox-Khaki-9*9*3-001\n/" b.txt
ACCS1793-CARD982-ZT617-C4002-15-Grandma
rongbudaizi
guanhua-Orange
Box-Khaki-9*9*3-001
ACCS1793-CARD982-ZT617-C4002-15-Nanny
rongbudaizi
guanhua-Orange
Box-Khaki-9*9*3-001
....
# 最后一行内容需要单独截取,一条脚本无法实现 ,故 进行换行占位. 后续会通过excel函数合并
#脚本解释:
sed -e "s/$/ # 将b.txt文件中每行末尾替换
\nrongbudaizi\nguanhua-Orange\nBox-Khaki-9*9*3-001\n/" # \n 换行符 其中rongbudaizi之类商品时固定的 每多一件商品后续增加一个换行符 ,如商品后续有变更 只需在相同位置进行替换即可
附赠商品sku 其二 :
[root@node1 ~]# cat b.txt | awk -F "-" '{print$1"-"$3"-"$(NF-1)}' |sed -n "s/$/ \n\n\n\n/p"
# cat b.txt 查看去重商品 列表
# | 管道符号 将前面的输出作为后面的输入
# awk -F "-" 通过awk 命令截取字符串 以- 作为分隔符
# {print$1"-"$3"-"$(NF-1)} $1 截取第一行内容 "-" 引号之间的-是自己指定的分隔符 $(NF-1) 是最后一个字段的前一个 这里取到的是cm字段
# s/$/ \n\n\n\n/p" 通过sed命令将每行的末尾处 增加4个换行符
效果展示:
[root@node1 ~]# cat b.txt | awk -F "-" '{print$1"-"$3"-"$(NF-1)}' |sed -n "s/$/ \n\n\n\n/p"
ACCS1793-ZT617-15
ACCS1793-ZT617-15
...
excel 拼接
- 将第一步for 循环的结果 粘贴到excel *组合sku字段实现
- 将附赠商品sku 其一的内容粘贴到新的一列 然后将附赠商品sku 其二粘贴到紧邻的一列 此时单元格格式为
CARD982-Grandma | |
---|---|
rongbudaizi | |
guanhua-Orange | |
Box-Khaki-993-001 | |
ACCS1793-ZT617-15 | |
CARD982-Nanny | |
rongbudaizi | |
guanhua-Orange | |
Box-Khaki-993-001 | |
ACCS1793-ZT617-15 | |
CARD982-Nana | |
rongbudaizi | |
guanhua-Orange | |
Box-Khaki-993-001 | |
ACCS1793-ZT617-15 |
-
通过拼接函数即可将两列合并为一列
- 拼接函数为
=A1&B1
CARD982-Grandma CARD982-Grandma rongbudaizi rongbudaizi guanhua-Orange guanhua-Orange Box-Khaki-993-001 Box-Khaki-993-001 ACCS1793-ZT617-15 ACCS1793-ZT617-15 CARD982-Nanny CARD982-Nanny rongbudaizi rongbudaizi guanhua-Orange guanhua-Orange Box-Khaki-993-001 Box-Khaki-993-001 ACCS1793-ZT617-15 ACCS1793-ZT617-15 CARD982-Nana CARD982-Nana rongbudaizi rongbudaizi guanhua-Orange guanhua-Orange Box-Khaki-993-001 Box-Khaki-993-001 ACCS1793-ZT617-15 ACCS1793-ZT617-15 CARD982-Nan CARD982-Nan rongbudaizi rongbudaizi guanhua-Orange guanhua-Orange Box-Khaki-993-001 Box-Khaki-993-001 ACCS1793-ZT617-15 ACCS1793-ZT617-15 - 拼接函数为