您的位置:首页 > 运维架构 > Shell

踩过的几个坑json.dumps/含while的shell脚本/awk~

2016-07-23 13:44 253 查看

坑了自己的坑

  踩坑的经历是痛苦的,值得纪念,毕竟表示曾经逝去的青涩,同时避免以后再踩,虽然踩踩更健康。

  注1:坑号与重要度无关,只是顺序表示而已。

  注2:版权已由中华人民共和国公民本人所有,最终解释权归我党所有。

[b]1号坑[/b]

  上硬菜,已知 list=[{“a”:”1”, “b”:”2”}, {“c”:”逗逼”,”d”:”人生”}],如何存储到文件中,且中文能够正常显示呢?

import json
list_save=[{"a":"1a", "b":"2b"}, {"c":"逗逼","d":"人生"}]
json.dumps(list_save, ensure_asscii=False)
## 上面json.dumps将变量存储为json字符串,且支持中文 ##
## 精髓就在 ensure_asscii=False上面
## 没有这个设置,将其存储到文本中时,会出现\e0\gx这样的中文 ##
## 技巧:大量地读取被json.dumps的文件时,用simplejson.loads()读取会更快,或者直接用python的内置函数 ##


  中文处理总是伴随着各种蛋疼的诡异事情发生,木有办法,老祖宗留下的最开发人大脑的语言有其独特的地方,体现在代码里也一样,需要不一样的待遇#我就是我,不一样的我#

[b]2号坑[/b]

  上鸡汤,已知一个shell脚本用while写的无限循环,想修改循环内部的代码,怎么生效?前提:该shell脚本早先已经运行起来了。

(1)## while的shell脚本 ##
while [1 -gt 0]
do
## 某些无聊操作 ##
done
(2)## 你想添加的shell命令 ##
echo "我为什么这么帅气无双?"
(3)## 修改之后的shell脚本 ##
while [1 -gt 0]
do
## 某些无聊操作 ##
echo "我为什么这么帅气无双?"
done


  当修改完事之后,发现死活不出“我为什么这么帅气无双?”,然后对自己的帅度产生怀疑,难道真的不帅?难道苍天无眼?啊!

  悲愤中,准备砸了电脑,干掉所有不爽的人,自此浪迹天涯之时,发现这个循环shell脚本一直在运行,所有后续修改只有在重新启动该脚本之后才会生效,然后阳光明媚起来,生活是美好的。

## 查看一下这个shell脚本是否在运行 ##
ps -aux | grep "shell.name"
## 1314  0.0  0.0 138  222 ?  S    11:11   00:00 sh shell.name ## 果断在运行中 ##
## Gan掉这个shell脚本 ##
kill -9 1314
## 多么痛的领悟啊,1314被亲手干掉了 ##
## 重新给这个脚本一次机会 ##
cd /your/shell/dir/; sh shell.name


[b]3号坑[/b]

  这是一道awk的菜,其实不是坑,只是记录下来,告诉自己有时候有很牛逼的东西你不懂,自己搞一套从而浪费了时间。

  我们想计算文本中某些列的累加和,或者类似的操作,用awk怎么搞?

## awk -F '\t' 'BEGIN{init paras}{if(expre) process here} END{print result}' ##
## 解释一下上面的命令,begin->开始 初始化参数;if满足条件,则对参数操作,end->输出结果 ##
## -F '\t'是设置间隔符为"\t" ##
## 假如我们计算一下第三列的总和 ##
awk -F '\t' 'BEGIN{sum=0}{sum += $3}END{print "sum is:"$sum}' file.name
## 其中BEGIN/END小写行不,不行 ##


[b]4号坑[/b]

  这是后续又踩的坑之一,补充在这里。

## 标准输出1、标准error输出2 ##
## this means 标准输出 到文件中 ##
print sth > file
## this means 将标准错误重定向到 标准输出 ##
print sth > file 2>&1
## 上面这句的好处是 ##
## 如果在shell里面的错误,也可以打印到文件里 ##
## 方便查看日志的时候查看执行异常,错误 ##


[b]5号坑[/b]

  这个坑本不是坑,无奈我踩进来了,也就变成了坑。读取文件。

## 关于读取文件的方法 ##
## (1) 简洁版,最优版 ## 建议这个方法 ##
for line in open(filepath):
line = line.strip()# 这里需要加strip,否则会有\n #
if len(line) == 0: continue
# do sth yourself #
## (2) 稍微复杂版 ##
f = open(filepath)
line = f.readline().strip()
while line != "":
if len(line)>0:
# do sth yourself #
# while 里面不能用continue # 结构上不美观紧凑 #
line = f.readline().strip()
# 这一句是必须的,否则while无法循环 #
## (3)避免line的读取 ##
with open(filepath) as f:
for line in f:
line = line.strip()
if len(line) == 0: continue
# do sth yourself #


后记

  踩坑是个不断纠错的过程,是指导学习趋向于较优的一种学习策略。在机器学习中,可以用其来指导学习过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: