shell学习笔记

导读

在线记笔记,呵护健忘的自己。

${var:0:1}  # 从第一个开始截取一个
date '+%y%m%d,%k%M'  # 时间,格式处理
wget -c url -P /route/  # 指定下载路径
echo -e 'id\tPhylum\tSpecies' >> tax_bin.txt  # 打印一行追加到文本
tree -h filefold/  # 统计文件数,储存大小
df -h ./ # 当前盘的存储情况
gunzip -c test.fa.gz > test.fa  # 解压保留源文件,标准输出

# 文件是否存在,文件夹用 -d
for i in `cat seq.list`; do
    if [ ! -f $i ]; then
        echo -e "\033[31m$i not exists\033[0m"
    else
        echo -e "\033[32m$i already exists\033[0m"
    fi
done

if [ -f a.bam ]; then rm a.sam; fi
if [ -f a.sorted.bam ]; then rm a.bam; fi

# 按日期查找文件
for i in `ls --full-time ./ | sed -n '/2021-05-08/p' | awk '{print $9}'`;
do
    echo $i
done

# 按列合并
paste a.txt b.txt > tmp.txt
# if else if
cat $file | sed '1d' | awk -F"\t" '{\
if($2!="-") print $2; \
else if($3!="-") print $3; \
else if($4!="-") print $4; \
else print ""}' | sed -e '/^$/d'

打印

awk -v tmp=$i 'BEGIN{print tmp}{printf"%s\n", $5} | echo # awk逐行,echo 单行

下载

wget -c -t 0 https://www.XXX

按行切割文本

split -l 2 data.log -d -a 4 data_
1)按2行切割 -l 2
2)指定切割后的文件前缀名 data_
3)指定切割后的文件后缀名为数字 -d
4)指定切割后的文件后缀名数字的长度 -a 4,这里长度可根据切割出来的文件有多少估算

一、sed

替换、删除、插入

s/\(.*\)XXX/\1YYY/' # 将最后一个XXX -> YYY
sed 's/string/'$variable'/'  # 引用变量
sed -e "s///g;s///g"  # 多重替换
sed 's/ /_/g'  ##  替换所有空格
sed -i '1 i query\tmatch' file  # 在第一行前插入一行,直接覆盖文件
sed '1d' file  # 删除file第一行
sed '$d' file  # 删除最后一行
sed '1,5d' file  # 删除1-5行
sed -e '/^$/d'  # 删除空行
cat test.txt | sed -e 's/__[0-9a-zA-Z]*$//g'  # 删除最后的字母
sed '/_/d'  #删除含_或者任何string的行
cat test.txt | tr '\n' ','  # 换行符替换成逗号
cat file | sed ":a;N;s/\n//g;ta"  # 替换行符
sed -n '3p;5,7p' test.txt  # 打印第 3 行 和 5~7 行内容
sed 's/\r//g'  # 删除特殊空字符,^M

二、awk

判断、统计、选择、打印

awk '{$1="";print $0}'  # 删除第一列
awk -F"\t" '{printf("%s\t%s\t%s\n", $1, $3, $4)}'  # 格式化输出
awk '{SUM+=$5}END{print SUM}' file  # 统计某一列之和
awk '{ total+=$4; count++}END{print total/count }' # 求均值
awk '{print $2}' file  # 打印某一列
awk '{if($2==0 || $2==16) print $0}' file  #  打印“列”满足条件的指定“行”
awk '{if($3!="tRNA" && $3!="rRNA") print $0}' file  # 打印“列”满足条件的指定“行”
awk 'NR==1{print}' file  # 打印指定行
cat file | awk -F"," '{$10=null;print $0}' | awk 'BEGIN{OFS=",";}{print $0}'   # 删除csv某列,保存csv文件 
awk -F"\t" -v tmp=$base 'BEGIN{OFS="\t"}{print $1, tmp, $4, $7}'  # tmp将在每行打印
# 某列,每行长度
cat protein2.target | awk '{print $2}' | awk -F "" '{print NF}'

三、for while

循环:

cat 01_merge.txt | while read line; do
    name=`echo -e "$line" | awk -F"\t" '{print $1}'`
    i=`echo -e "$line" | awk -F"\t" '{print $2}'`
    echo -e "$name done..."
done

加入行里面有空格,使用while读取文本,$line使用""

for i in `ls ./`;do echo $i;done
#  获取某文件夹下的所有文件名

for i in $(find -name "*.ffn");do cp $i ./wd/;done  
# 获取所有子目录下的所有特定文件

for i in $(find -name "*.ffn");do cat $i >> ../bacteria.fastq;done 
# 批量合并子目录下特定文件

for i in `find -name 'bin.*'`; do
    file=${i##*/}
    route=${i%bin*}
    mv $i ${route}${file}.gene.abun.txt
done
# 修改文件名,find搞定复杂路径

for i in Bin_all/bin.*.faa; do
    base=${i##*/}  # 取👉,切两刀
    name=${base%.faa}  # 取👈,切一刀
    command -i $i -o $name.raw &
done
# 常用的command for循环

四、sort

排序:

sort file  # 排序
sort -t ','  -k 1,1 -u  # 去重 -t 指定分隔符 -k 1到1列 -u 去重
sort -t $'\t'  # tab分隔符
sort -t "," -k 1n,1 -k 3rn,3 file
# 按第一列正排序,按第三列反排序
    -t 指定文本分隔符
    -k 指定排序列
    -n 按数字进行排序
    -r 翻转排序结果
        

五、uniq

去重、重复统计

uniq file  # 去重
sort file | uniq  # 排序,去重
uniq -ic file  # 去重,c计数,i不区分大小写
sort | uniq -ic | sort -k 1nr # 排序,去重,大到小排序

六、grep

匹配查找:

grep -c "^>"  file [相当于] cat file | grep "^>" | wc -l [效率提高三倍]
cat AF04-12.fna | grep -o 'N' | wc -l  # 单字符出现的次数
grep $i  # 接收变量
grep -i ''  # 忽略大小写匹配
grep -E '^>.*$' file  # 提取特定行
grep -E '^[^#]' file  # 提取非xx的行
grep -n "^.*ID=rna23.*$"  file  #  显示特定行的信息,显示行数
grep -v '^$' file  #  删除空行
grep -v '^$\|_' file  # 匹配不符合条件的 \|: 或者转义。删除空行和有下划线的行
grep -v -E '^$|_' file  # 使用正则表达式;删除空行和有下划线的行
zcat file.fq.gz | grep '@' | wc -l  #  查看压缩文件特定行行数
grep -A 10 '123' test.log //打印匹配行(包含)的后10行
grep -B 10 '123' test.log//打印匹配行(包含)的前10行
grep $'XXX\t\n' # 匹配制表符,回车

ls -l | grep -c '^d'
#  文件数量统计
    1 普通文件的文件权限第一个字符为“-”
    2 目录文件的文件权限第一个字符为“d”
    3 字符设备文件的文件权限第一个字符为“c”;
    4 块设备文件的文件权限第一个字符为“b”
    5 符号链接文件的文件权限第一个字符为“s”

七、ln

软链接、删除软链接

ln -s /media/cheng/disk1/huty/ huty
# 嫌弃路径太长创建软连接,一键到达目的地

rm -rf ./huty
# 删除软连接

ln -s $(readlink -f ./phylophlan.py) ~/bin/
# 软件,软链接

rm -rf ./huty\color{green}{/},会删除数据

八、ps、kill

查看、杀死进程:

ps -df | grep '[ametag]'  #  查看ametag进程信息
kill -9 22608  # 通过进程号,杀死进程

九、sleep

数秒:

sleep 1800  # 30分钟
while :
do
    if [ `ps -ef | grep 'diamond blastp' | wc -l` != 1 ]; then
        sleep 300  # 5分钟 
        continue
    fi
    break
done
# 一直循环,等待diamond blastp的进程结束,再继续下游分析,下游分析需要diamond的结果

十、mount

挂载:

sudo fdisk -l  # 查看磁盘情况

Disk /dev/sdb: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

sudo mkdir disk1  # 创建挂载点
sudo mkdir disk2
sudo mkdir disk3

sudo mount /dev/sdb /[route]/disk2  # 挂载硬盘sdb到/media/cheng/disk2
sudo mount /dev/sdc /[route]/disk1  # 挂载硬盘sdc到/media/cheng/disk1
sudo mount /dev/sdd /[route]/disk3  # error,磁盘分区
sudo mount -t ntfs /dev/sdd1 /[route]/disk3

sudo umount /dev/sdb  # 弹出设备
umount -l /dev/sdd1
umount -f /dev/sdd1

修改虚拟目录/dev/shm大小:

如果需要使用到这个目录,并且默认的大小不够使用,而其他程序占用的内存又比较少的时候,可以修改器最大占用内存的大小,来达到自己的目的。其实修改它的原理很简单,对其进行重新挂载即可,挂载的时候指定挂载参数。

$ df -h
tmpfs           504G  320K  504G   1% /dev/shm
$ sudo mount -o size=1000g -o remount /dev/shm/
$ df -h
tmpfs          1000G  320K 1000G   1% /dev/shm

参考:https://www.cnblogs.com/oloroso/p/5405113.html

十一、ssh

远程登录:

ssh admin@192.168.1.xx  # 一台服务器登录到另一台服务器
$ 输入密码

十二、scp

远程传输:

scp file user@192.168.1.x:/home/
# win10 cmd和服务器可直接互通

十三、md5sum

查看文件的MD5信息:

MD5即Message-Digest Algorithm 5(信息-摘要算法5),是当前计算机领域广泛使用的哈希算法之一,用于确保信息传输完整一致。在下载完成序列文件后,使用软件(如Windows MD5Check等)进行MD5校验,可以确保下载下来的数据与我们上传的是一致的。

$md5sum file
22d6e7e468afedf0f7cbe3997610452a file
$cat MD5_file.txt
22d6e7e468afedf0f7cbe3997610452a file
# 文件不改变,MD5就不会改变。MD5是一个文件的唯一序列号。

十四、chown、chmod

更改文件拥有者、更改文件使用权限:

drwxr-xr-x  7 root root  4096 11月  8 17:40 disk1/
$ sudo chown cheng disk1  # 更改拥有者
drwxr-xr-x  7 cheng root  4096 11月  8 17:40 disk1/
$ chmod 777 disk1  # 更改权限
drwxrwxrwx  7 cheng root  4096 11月  8 17:40 disk1/

sudo chgrp cheng blib  # 更改组
sudo chown -R cheng:cheng blib  # 更改所有者,-R:该目录下所有文件

十五、echo

打印:变量、文字色、背景色

echo $variable
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”

十六、export

修改环境变量

./configure --prefix=/path/to/install  # 安装位置
make
make install
export PATH=/path/to/software/bin:$PATH  # 全局

十七、convert

图片处理

convert -density 400 -quality 200 Result/emapper/genome_go_annotation.pdf Result/emapper/genome_go_annotation.png
# pdf转png
convert -quality 600 png pdf
convert -quality 600 jpg pdf
convert -quality 600 svg pdf

十八、CPU memory查询

sudo dmidecode -t memory  # 内存信息
sudo dmidecode -t memory | grep 'Size' | wc -l  # 内存条数量
sudo dmidecode -t memory | grep 'Size'   # 内存条大小
sudo dmidecode -t memory | grep 'Type'  # 内存条型号
sudo dmidecode -t memory | grep 'Speed'  # 内存条频率
cat /proc/version  # 系统信息
cat /proc/cpuinfo  # cpu信息
cat /proc/cpuinfo | grep 'cpu cores' | head -n 1 # 每个cpu的核心数
cat /proc/cpuinfo | grep 'processor' | wc -l  # 线程数
cat /proc/cpuinfo | grep 'model name' | head -n 1  # cpu名称
cat /proc/cpuinfo | grep 'cpu MHz'  # 每个线程的频率,实时变化

十九、资源使用情况

top
htop  # 内存、进程、CPU情况
free -h  # 内存使用情况
ps -ef | grep 'diamond'  # 查看某个进程信息
kill -9 process_id  # 杀死某个进程
df -h  # 所有盘,存储使用
df -h ./  # 当前盘,存储使用
df -l  # 全写
sudo fdisk -l  # 分区磁盘空间情况
tree  # 查看目录,树状结构
du -h ./  # 查看文件夹大小,全部扫面打印
du -h -d 1 ./  # 查看文件夹大小,只扫一层目录

\color{green}{😀😀更新2021.5.31😀😀}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容