前言
当做自己的笔记本,这个文档不断更新,走出自己的舒适区。
实习小同学自取。
linux、python常用操作
一些小tric,提高效率的利器。
1.查找、分割
grep -e "aaaa" xxx.file | awk -F '\t' -v OFS='\t' '{print $1,$2}'
注意字符的转义
grep -E "CC|cc"xxx.file | awk -F '\t' -v OFS='\t' '{print "\""$1 "\"" "," }'
| awk -F '\t' -v OFS='\t' '{print $1 }'
"4086"
2.按第2列去重:
cat xx.file | awk -F',' '!($2 in a){a[$2];print $0}'
加行号:
awk '{print $0" "FNR}' file.txt >result.txt
3.hdfs统计多份文件大小:
hadoop_xx fs -dus hdfs/xxx/Out/21* | awk -F '\t' '{sum+=$2} END {print sum}'
4.看行数:
wc -l xxx.file
保留第5行之后:tail -n +5 file >
5.nohup挂任务
nohup sh test.sh 1>re.out 2>re.log &
6.统计某列指标求和
grep xxx xxx.txt | awk -F '\t' '{sum+=$3} END{print sum}'
awk -F '\t' '{arr[$1]=arr[$1]+$3}END{for(x in arr) print x,arr[x]}' pv_all
7.Git常见操作
git add ./*
git rm
git commit -m "add"
git push origin HEAD:refs/for/[branch] //branch 可以是master或是任意分支
pull = fetch + merge
将远程最新的代码同步到本地:git pull
commit之后还未合并,修改了代码想重新提交
1、查看之前的版本,选择要回滚至的commit id
git log
2、回滚一下,但是不修改本地代码
git reset --soft commit_id
3、重新提交
8.文件大小切割示例
执行split -C 1k info.txt 发现文件不是均分成1K但是文件的内容是完整的,所以大家懂了吧
执行split -l 10 -d -a 3 info.txt 1_ 可以看到-l把每个文件切成10行文件的后缀不是aa变成了000这是-d的效果,用数子后缀,-a 3是后缀3个,如果-a 4 后缀就变成了0000
split -l 200000 -d -a 3 xxx xxx_part
9.sed,tr替换
sed 's/要被取代的字串/新的字串/g'
cat cooking.stackexchange.txt | sed -e "s/\([.\!?,'/()]\)/ \1 /g" | tr "[:upper:]" "[:lower:]" > cooking.preprocessed.txt
\([.\!?,’/()]\)表示“[.\!?,’/()]”这些符号为一组,\1表示选取第一组,/g前面没有新字符串表示去掉第一组的符号
10.ubuntu显卡驱动安装与更新便捷方式,装系统的自然踩过很过坑
(1)sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt update
(2)系统设置”(System Settings) --> “软件与更新”(Software & Updates),点击“额外驱动”(Additional Drivers)
(3)重启,nvidia-smi测试下
11.linux连续操作
cd output && sh xxxt.sh
12.spyder 快捷键
spyder 快捷键 选中多行后:
Ctrl + 1: 注释/反注释
Ctrl + 4/5: 块注释/块反注释
Ctrl + L: 跳转到行号
Tab/Shift + Tab: 代码缩进/反缩进
有的编辑器是Ctrl + ?注释
13.两个文件横向合并
paste [-d] file1 file2
选项与参数:
-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。
14.vim替换
:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g
15.vim中tab符输入
插入模式或命令模式(编辑器底部的:提示符),键入 CTRL + V 然后TAB键 。
使用 CTRL + V 指示Vim应该接受下一个字符。即使是插入模式。
16.python编译pyc,注意去掉文件名版本号,高版本python会有这种情况
python -m py_compile
把pyc文件名的版本号去掉,不然会报错
xxx.cpython-35.pyc -> xxx.pyc
17.ftp路径拼接
echo ftp://`hostname``pwd`
18.linux进行排序
-t指定分隔符,-k2指定第2列,-n以数字排序, -r降序
sort -t $'\t' -k2 -n -r 08.txt >08_sort
19.随机取n行
shuf train.txt -o test.txt -n 30
从train.txt文件中随机读取30行文本输出到test.txt
20.vim复制
按键4,yy,p,表示把当前之后4行复制粘贴
21.vim批量缩进
:10,100>
第10行至第100行缩进
:20,80<
第20行至第80行反缩进
spark上的开源切词
ansj,jieba,hanlp三种
在maven 项目工程下的 pom.xml文件中添加 点击import即可完成对三种的获取,关于版本,既然开源,可选择最新稳定的;
关于切词粒度和词性需求,选择不同的算子;
0)添加pom.xml中的依赖
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.3</version>
</dependency>
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.3.4</version>
</dependency>
<dependency>
<groupId>com.huaban</groupId>
<artifactId>jieba-analysis</artifactId>
<version>1.0.2</version>
</dependency>
1)ansj
import org.ansj.domain.Term
import org.ansj.splitWord.analysis.ToAnalysis
import java.util.Arrays
def wordseg_by_ansj(input:String):String={
val temp = ToAnalysis.parse(input)
//val filter = FilterModifWord.modifResult(temp)
val word = for(i <- Range(0,temp.size())) yield temp.get(i).getName
val output = word.mkString("\t")
return output
}
2)jieba
import com.huaban.analysis.jieba.JiebaSegmenter
def wordseg_by_jieba(input:String):String={
val word = new JiebaSegmenter().sentenceProcess(input)
val output = word.toArray.mkString("\t")
return output
}
3)hanlp
import com.hankcs.hanlp.tokenizer.StandardTokenizer
def wordseg_by_hanlp(input:String):String={
val word = StandardTokenizer.segment(input)
val output = word.toArray.mkString("\t")
return output
}