工作中遇到的shell命令总结~

清除cache

在运行程序过程中,free -h发现cache占用太大,于是:

  • sync 保存数据
  • echo 1 > /proc/sys/vm/drop_caches

这样之后即可清除内存中的cache占用

awk

重新生成id

awk 'BEGIN{FS=",";OFS=",";}{$1=NR;print $0}' summary.csv > summary_ex.csv

打印出前两个字段

awk 'BEGIN{FS=",";OFS=",";}{print $1,$2}' summary.csv > summary_ex.csv

获取含有inf的id

cat summary.csv | grep inf | awk -F ',' '{print $2}' > inf_ids.txt

使用if语句

第三个不为空,但是第四个为空

cat find_result.txt | awk -F ',' '{if(!($3=="") && $4==""){print $0}' | awk -F ',' '{if($1==20160624){print $0}}' | wc -l

不匹配正则表达式,不匹配数字

cat find_result.txt | awk -F ',' '{if($3!~"[0-9]") && $4==""){print $0}' | awk -F ',' '{if($1==20160624){print $0}}' | wc -l

sort

根据第一个字段,分隔符是, 按数字排序

sort -t , -k1 -n summary_ex.csv > summary_ex_sort.csv

find

查找此类文件有多少个

find /data/output/ -type f -name ability*.csv | wc -l

在所有文件内容中查找有220010的行

find /data/output/errors/ -name 'stk*.csv' | xargs grep '220010'

查找内容为空的ability文件

find /data/output -name ability*.csv -type f -empty | wc -l

vim

:%s/app/data/gc 全文提醒替换

sed

删除grep出的特定行,形成新文件

1
2
3
4
for id in $(cat inf_ids.txt)
do
sed -i “/$id/d” summary.csv
done

将新生成的文件贴到某个文件末尾

1
2
3
4
for line in $(cat summary.csv)
do
truesed -i "\$a $line" summary_45.csv
done

其实这样就OK了。。

cat test1 test2 > test3

cat test2 >> test1 使用追加

接下来重新生成id

-e 以选项中指定的script来处理输入的文本文件

在文件第四行后面添加一行,a表示新增,在下一行

sed -e 4a\newLine testfile

删除第2-5行,不加-e也是可以的,记得加单引号

cat -n /etc/passwd | sed '2,5d'

删除到最后一行

cat -n /etc/passwd | sed '3,$d'

i表示插入,在目前的上一行

cat -n /etc/passwd | sed '2i drink tea'

反斜杠加入多行

cat -n /etc/passwd | sed '2a drink tea or ...\drink beer?'

c表示取代

cat -n /etc/passwd | sed '2,5c no 2-5 number'

p显示

cat -n /etc/passwd | sed -n '5,7p'

显示特定关键字的行,-n表示仅打印包含模板的行

cat -n /etc/passwd | sed '/root/p'

删除所有包含关键字的行,其他行输出

cat -n /etc/passwd | sed '/root/d'

数据搜寻并且执行命令

cat -n /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'

多点编辑

cat -n /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

-i 直接修改文件内容

sed -i 's/\.$/\!/g' regular.txt

sed -i '$a # This is a test' regular.txt