1. 查找文件中重复的值
文件中的值
111
222
888
999
111
命令:
sort ./test.log | uniq -d
输出:
111
sort命令的常见用法:https://www.cnblogs.com/fulucky/p/8022718.html
2. 查看文件行数
wc -l vocab.en.txt
3. 查看字符串“-”所在的行数
grep -n "–" vocab.en.txt
4. 查看文件的某几行的内容
sed -n '27,27p' vocab.zh.txt 显示文件vocab.zh.txt第27行的内容
sed -n '27,30p' vocab.zh.txt
5. 查看当前文件夹下有多少行
ls -l |wc -l
6.带行号查看文件
cat -n testZh3.txt
7. 将一个文件的前500000行copy到另一个文件
head -n 500000 train.en > train.en1
8. 对一个文件重命名:
mv -f train.en1 ./test/train.en
9.合并2个文件:
cat corpus.bpe32k.en corpus.bpe32k.de > corpus.bpe32k.all 将.en和.de合并到.all中
10.vim一个文件时,显示行号:
:set nu
11.查找文件中关键字所在的行:
grep -c "Validating model at step" ./nohup.out 在nohup.out中查找包含"validating---”的行
grep -nr "Validating model at step" ./nohup.out 在nohup.out中查找包含"validating---”的行及其对应的行号
cat nohup.out |head -n 6000 |tail -n +5000 显示nohup.out中5000-6000行对应的内容
从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
12. 查找文件所在位置
find . -name "loadEn.py"
13.常用的文件压缩、解压命令
-
解压全部命令参考:
tar –xvf file.tar 解压 tar包
tar -xzvf file.tar.gz 解压tar.gz
tar -xjvf file.tar.bz2 解压 tar.bz2
tar –xZvf file.tar.Z 解压tar.Z
unrar e file.rar 解压rar
unzip file.zip 解压zip
-
linux下解压命令大全
-
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
-
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
-
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
-
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
-
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
-
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
14.查看文件夹下文件大小
du -sh *
15.下载文件到本地Windows以及本地上传
使用xshell登录方便,操作也比较方面。传文件 就是使用rz,sz 首先,服务器要安装了rz,sz yum install lrzsz 当然你的本地windows主机也通过ssh连接了linux服务器 。
运行rz -be,会将windows的文件传到linux服务器
运行sz filename,会将文件下载到windows本地
例如:
sz 服务器的file路径。例
sz /home/linyimeng/game/liantong2018/data/result_xgbc_dummey2_fenxiang.csv
会自动弹出窗口,选中本地要存放的文件位置
16.截取文件中的20000行生成新文件并将新文件放到指定目录
head -n 20000 finance_classes.txt > ../../../../lat/part.txt
17.截取文件部分内容保存到新文件中
sed -n '开始行数,结束行数p' 待截取的文件 >> 保存的新文件
这样就可以将指定的日志内容保存到新文件中了。执行如下就可以将执行日志保存到daxin.log中了。
sed -n '1350679,2151443p' hive.log.2018-06-26 >> daxin.log
18. 统计文件夹下的文件个数
统计某文件夹下文件的个数: ls -l |grep "^-"|wc -l
统计文件夹下文件的个数,包括子文件夹里的:ls -lR|grep "^-"|wc -l
统计某文件夹下目录的个数:ls -l |grep "^d"|wc -l
统计文件夹下目录的个数,包括子文件夹里的:ls -lR|grep "^d"|wc -l
如统计/home/archer目录(包含子目录)下的所有js文件则:ls -lR /home/archer|grep js|wc -l 或 ls -l "/home/archer"|grep "js"|wc -l
ls -lR #长列表输出该目录下文件信息(R代表recursive,对子文件夹进行搜索,可能是目录、链接、设备文件等)
grep "^-" #将长列表输出信息过滤一部分,只保留一般文件;如果只保留目录就是 ^d
wc -l #统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数
19.cat命令
一次性查看整个文件内容:cat filename
创建一个文件:cat > filename 按Ctrl+d退出,只能创建新文件,不能创建已有文件!
将几个文件合并成一个文件:cat file1 file2 > file
20.more命令
- 从笫n行开始显示:more+n filename
- 定义屏幕大小为n行:more -n filename
- +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示:more +/pattern filename
21.grep命令
- 查找指定进程:ps -ef|grep python
- 查找指定进程个数:ps -ef|grep python -c
- 从文件中查找关键字:grep "O" utils.py 在utils.py中查找关键字O
- 找出以某个关键字开头的行内容:找出以p开头的行内容 grep ^p Mapper.py
- 找出不以“p”关键字开头的行内容: grep ^[^p] Mapper.py
- 输出以hat结尾的行内容:grep hat$ filename
- 输出一个文本文件中数据的行数:grep -c ‘.*’ filename 如: grep -c '.*' Mapper.py
- 搜索log目录下卡号为:“4563513600036385540”,在哪个文件的具体位置及行数:grep -rin “4563513600036385540” log/
-
grep常用参数
-c:打印符合要求的行数(及统计符合要求多少行)
-i:忽略大小写
-n:打印符合要求的行,并显示行号
-v:反着打b印(及不包含符合要求的内容) -
grep -c 'nologin$' /etc/passwd 查询nologin用户的个数 grep -v 'nologin$' /etc/passwd 查询不是nologin用户
22.cut剪切
cut -nb 3 test.txt 将test.txt的第三列剪切出来
23. sed编辑
(1)sed删除
nl test.txt |sed '2,5d' 删除文件的2-5行,屏幕上只显示其他行。
sed '3,$d' test.txt 删除文件的第3行到最后一行,显示其他行
sed '1,2d' test.txt 删除文件的1-2行,显示剩下的行
sed '/dada/d' test.txt 删除文件中dada字符串所在的行,显示其他行
(2)sed替换
sed 's/da/ttt/g' test.txt
说明:s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个da,所有的 da都会被替换为 ttt。如果没有 g 命令,则只将每一行的第一 da替换为 ttt。
sed 's/[0-9][0-9]$/&.5/' test.txt 所有以 2 位数结尾的行后面都被加上.5。
sed -n ‘$=’ test.txt 显示test.txt中的行数
(3)sed查看
sed -n '1,2p' ab 显示文件的1-2行
sed -n '/da/p' test.txt 查询包括关键字da的所有行
24. awk (将一行分为多个字段做处理)
(1)
last -n 5 查看当前用户信息的前5行
last -n 5 |awk '{print $1}' 从这些信息中取出第一个字段的信息并打印
(2)一些信息的提取
[chen@localhost scripts]$ cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
#cat /etc/passwd |awk -F ':' '{print $1}' #-F 指定分隔符为 :
root
daemon
bin
sys
#cat /etc/passwd |awk -F ':' '{print $1"\t"$7}' #显示第1、7个字段
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
#搜索/etc/passwd有root关键字的所有行,并显示对应的shell
# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash
(3)awk查找某个关键字
awk '/收入/' finance_words.txt
grep 'nologin$' /etc/passwd|awk -F ':' '{print $1}' grep查看以nologin结尾的行,AWK查询以":"分隔的第一列的信息
(4)awk提取文件某列并输出
awk '{print $1}' ./Input.txt > ./out.txt
这里' '中是要输出的表达式,$1代表第一列,Input.txt是输入文件。
awk '{print $1,$2}'
提取前两列。
提取之后的文件就可以用sort等命令进行操作:
sort ./out.txt | uniq out
排序并删除重复行。
awk新增命令:
1.输出文件的第一列,第四列
- 其中单引号中的被大括号括着的就是awk的语句,注意,其只能被单引号包含。
- 其中的$1..$n表示第几例。注:$0表示整个行。
$ awk '{print $1, $4}' netstat.txt
2.awk的格式化输出
awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt
3.awk 条件筛选
过滤条件为:第三列的值为0 && 第6列的值为LISTEN
awk '$3==0 && $6=="LISTEN" ' netstat.txt
当第三列大于0的时候取出当前行
awk ' $3>0 {print $0}' netstat.txt
需要表头时引入内建变量NR
awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt
加上格式化输出:
awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt
awk的内建变量:
$0 | 当前记录(这个变量中存放着整个行的内容) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格或Tab |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。 |
FNR | 当前记录数,与NR不同的是,这个值会是各个文件自己的行号 |
RS | 输入的记录分隔符, 默认为换行符 |
OFS | 输出字段分隔符, 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
FILENAME | 当前输入文件的名字 |
输出行号:
awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s\n",NR, FNR, $4,$5,$6}' netstat.txt
4.指定分隔符
awk 'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd
等价于:-F 也是指定分隔符
|
5.指定多个分隔符
awk
-F
'[;:]'
6.以\t作为分隔符输出
awk
-F:
'{print $1,$3,$6}'
OFS=
"\t"
/etc/passwd
7.字符串匹配
awk
'$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}'
OFS=
"\t"
netstat.txt
$
awk
'$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'
OFS=
"\t"
netstat.txt
第一个是打印第六列中开头包含FIN的4,5,6列,
第一个示例匹配FIN状态, 第二个示例匹配WAIT字样的状态。其实 ~ 表示模式开始。/ /中是模式。
awk
'/LISTEN/'
netstat
.txt 匹配行中的关键字LISTEN
awk
'$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}'
OFS=
"\t"
netstat
.txt 匹配第6列中包含FIN或TIME的字段
取反:
awk
'!/WAIT/'
netstat
.txt
脚本编写:第6列是TIME
|ESTABLISHE,则将结果输出到1.txt,第6列是listen,则将结果输出到2.txt,其余的输出到3.txt。
awk
'NR!=1{
if
($6 ~
/TIME
|ESTABLISHED/) print >
"1.txt"
;
else
if
($6 ~
/LISTEN/
) print >
"2.txt"
;
else
print >
"3.txt"
}'
netstat
.txt
8.统计
计算所有的C文件,CPP文件和H文件的文件大小总和。
ls
-l *.cpp *.c *.h |
awk
'{sum+=$5} END {print sum}'
统计每个用户的进程的占了多少内存(注:sum的RSS那一列)
ps
aux |
awk
'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'
9.awk脚本
- BEGIN{ 这里面放的是执行前的语句 }
- END {这里面放的是处理完所有的行后要执行的语句 }
- {这里面放的是处理每一行时要执行的语句}
(5) 查看一个文件中有多少个query(每个query下有多条数据)
head 20190916.tsv|awk -F"|" '{print $1}'|sort|uniq|wc -l
cat wiseautocar_bs_top20_hitmodels_20190916.tsv|awk -F"|" '{print $1}'|sort|uniq|wc -l
25.删除某个前缀开头的文件
find ./ -name 'news_video_vec_20180*' -exec rm {} \;
26.删除文件中的某一行
sed -i '1d' filename 删除文件第一行
sed -i '2d' filename 就是删除第二行
sed -i 'nd' filename 就是删除第二行
sed -i '$d' filename 就是删除最后一行
27.移动光标到行首和行尾
ctrl+a 光标移动到行首
ctrl+e 光标移动到行尾
28.mac连接远程服务器
a).打开Mac的命令终端
b).输入ssh -p 22 用户名@服务器地址 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了. 22是端口号
29.暂停正在运行的进程,使其在后台运行
在ssh shell中运行脚本,比如我运行一个批量下载脚本:
python download-app-annie.py
按下ctrl-z中断脚本运行,此时系统提示:
^Z
[1]+ Stopped python download-app-annie.py
意思是编号为1的任务挂起了,[1]就是任务的编号,里面的数字也可能是2,3,4..
输入命令:bg 1
这个命令将1号任务切换到后台执行
输入命令:disown -h %1
这个命令的意思是将1号任务从当前shell的任务列表中移除,并且忽略HUP信号,这样,即使当前Shell结束了,这个任务也不会被结束,而是继续留在后台执行。
30.vi模型下跳到文本的最后一行
按“G”,即“shift+g”
31.linux 下 ls 文件夹和文件没有颜色的解决办法
.bashrc 中加入
alias ls="ls --color"
32.在文件中查找指定字符串出现的次数
grep -c "绗缝" train.txt
33.在文件中查找到指定的字符串并对其进行批量替换
将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单
34. 比较两个文件的差异,将不同处的信息显示出来
语法:diff [options] FILES
(1)FILE1 FILE2 :源是一个文件,目标也是文件。这两个文件必须是文本文件。以逐行的方式,比较文本文件的异同处。
e.g. diff 1.txt 2.txt
(2)DIR1 DIR2 :源是一个目录,目标是目录。diff 命令会比较两个目录下名字相同的文本文件,依照字母次序排序,列出不同的二进制文件,列出公共子目录,列出只在一个目录出现的文件。
e.g. diff dir1 dir2
(3)FILE DIR :源是一个文件,目标是目录。diff命令把源文件与目标目录下的同名文件比较。
e.g. diff 1.txt dir2
(4)DIR FILE :源是一个目录,目标是文件(不是目录)。源目录下所有文件中与目标文件同名的文件,将用来与目标文件比较。
e.g. diff dir1 2.txt
35.统计文件夹下的文件数
ls -l |grep "^-"|wc -l
36.根据日期将copy,移动文件
copy:将path1下的修改日期在一天之内的文件copy到path2下
find path1 -mtime -1 -type f -exec cp {} path2 \;
移动:将path1下的修改日期在一天之内的文件mv到path2下
find path1 -mtime -1 -exec mv {} path2 \;
37. du 显示某个特定目录(默认当前目录)的磁盘空间使用情况
du -c 显示所有已列出文件总大小
du -h 按照用户易读的格式输出大小
du -s 显示每个输出参数的总计
du -sh *| sort -nr 对目录文件大小按数值排序
38.排序数据
sort file 按照会话指定的默认语言排序规则对文本文件中的数据进行排序
sort -n file 对文件中的数字按照数值而不是字符排序
sort -M file 按月进行排序
sort -t ':' -k 3 -n file 将文件按冒号分割,并对其中第三个字段进行数值排序
39.搜索数据
grep t file 搜索file中匹配模式‘t’的行
grep -n ki file 显示匹配模式t的行所在的行号
grep -v t file 方向搜索,输出不匹配该模式的行
grep -c ki file file中有多少个满足匹配模式ki的行
grep -e s -e i file file中包含多个匹配模式的行,匹配s或i
grep [tf] file 使用正则表达式进行匹配,匹配包含字符t或字符f的行
https://www.jianshu.com/p/de98af781829
参考:https://www.cnblogs.com/xue0123/p/6413419.html
https://blog.youkuaiyun.com/weixin_42778196/article/details/81560334
https://coolshell.cn/articles/9070.html