shell关于文件操作
一、如何将一个十进制的整数用2进制表示出来?
echo "obase=2;50" | bc
二、Linux下经常需要删除空白行,grep,sed,awk,tr等工具均可实现
grep -v '^$' filename
sed '/^$/d' filename
awk '{if($0!="") print $0}' filename
tr -s '\n' < filename
三、shell中if 判断语句中的匹配模式
=~ 表示匹配
if [[ $slave =~ "140$" ]]
then
echo "end with 140"
fi
四、awk中split的用法
有一个文件存在两域,第一域是基因名字,第二域是别名,别名存在多个,以|分割,要求将基因名和别名一一对应,如将下图转换成下下图的结果


awk -F"\t" -v OFS="\t" '{if($2~/\|/){len=split($2,a,"|");for(i=1;i<=len;i++)print $1,a[i]}else print $0}' input > result
#~表示第二域匹配到|,按|分割保存到数组a
#split()返回a的长度,并遍历a
#else未匹配到|则直接输出
五、join对两个文件相同域进行合并操作
现在有两个文件,其中两个文件有部分相同的域,如何筛选出这些域相同的记录,如A,B文件如下图:


从上可以看出两个文件前四行有相同的域,那么我想把这些相同域的记录筛选出来,即前四行筛选出来,该怎么做呢?注意:join操作必须按指定的域进行排过序
join -1 1 -2 4 file_one file_two
'''
1:3113245|3144862 intergenic_region 1 3113245 3144862
1:3121377|3144862 intergenic_region 1 3121377 3144862
1:3404029|3404480 intron 1 3404029 3404480
1:3420575|3421901 intron 1 3420575 3421901
''' #-1和-2指定连接的域 join -1 4 -2 1 two one
'''
1:3113245|3144862 1 3113245 3144862 intergenic_region
1:3121377|3144862 1 3121377 3144862 intergenic_region
1:3404029|3404480 1 3404029 3404480 intron
1:3420575|3421901 1 3420575 3421901 intron
'''
六、有两个关键词,如何将这两个关键词之间的行打印出来?
: comment
file:
1
2
3
3
4
5
6
7
7
8
9
10
comment #将3和7之间的行打印出来
awk '/3/,/7/{print $0}' file
'''
3
3
4
5
6
7
'''
#可见将3和7之间的行一块儿打印出来了,其中3有2行,7只打印出一行
#如果不想打印出3和7关键词行
awk '/3/,/7/{if(i>1)print x;x=$0;i++}' file
'''
3
4
5
6
''' awk '/3/,/7/{if(i>2)print x;x=$0;i++}' file
'''
4
5
6
'''
七、awk中substr()函数使用
substr():截取字符串,返回从起始位置起,指定长度之子字符串;若未指定长度,则返回从起始位置到字符串末尾的子字符串。
格式:
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
#将fastq转换为fasta
awk '{if(NR%4 == 1){print ">" substr($0, 2)}}{if(NR%4 == 2){print}}' fastq > fasta
八、有一文件

如何根据红框中的值是否相同,将两行或者多行变成一行,GENE_ID列按逗号分隔,结果如下:

awk -F"GENE_ID=" 'BEGIN{tem=0}{split($2,array,";"); if($1!=tem){printf("\n%sGENE_ID=%s",$1,array[1]);tem=$1}else{printf(",%s",array[1])}}' paragon | sed '/^$/d'
#coding=utf-8
import sys
in_file = sys.argv[1]
#需要保存上一行的name和line
#注意输入文件bed要先排序:sort -V your_bed
name_before = ''
line_before = ''
with open(in_file) as f1:
for eachline in f1:
array = eachline.strip().split('\t')
if array[3] != name_before:
if line_before:
print line_before
gene_id = array[-1].strip().split(';')[0]
new_line = '\t'.join((array[0:-1] + [gene_id]))
name_before = array[3]
line_before = new_line else:
gene_id = array[-1].strip().split(';')[0].split('=')[-1]
line_before = line_before + ',' + gene_id #print the last line
print line_before
九、如何提取字符串中的数字部分

如执行上面的命令,想提取其中的数字部分:
pstree -Ap | tr -cd "[0-9])" | sed 's/)/\n/g' | less
-d表示删除,[0-9]表示所有数字,-c表示对条件取反,所以tr -cd "[0-9]"这句话的意思就是,剔除非数字的字符
十、一个文件vim编辑中文显示正常,more或者less显示乱码
执行下面的命令试试:
cat data_20190306.csv | iconv -f GBK -t UTF-8 > data_20190306_new.csv
如果vi中文乱码:
vi ~/.vimrc
#添加:set fileencodings=utf-8,gbk
如果使用python打开文件报UnicodeDecodeError错误,则可以再linux下使用file命令,查看文件编码格式,然后open时候指定encoding参数,如:
Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
说明文件是utf-16编码,并且是\n\r换行
十一、windows文件转换unix文件
vi一个文件:
set ff? #显示当前文件格式
set ff=unix #设置成unix格式
set ff=dos #设置成dos格式
或者dos2unix命令,但是得先安装
shell关于文件操作的更多相关文章
- 让你提前知道软件开发(22):shell脚本文件操作
		文章1部分 再了解C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比方从文件里读取一行数据.向文件追加一行数据等. 完毕文件读写操作的方法有非常多,了 ... 
- Shell脚本文件操作
		Linux Shell http://baike.baidu.com/link?url=2LxUhKzlh5xBUgQrS0JEc61xi761nvCS7SHJsa1U1SkVbw3CC869AoUC ... 
- Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比
		Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ... 
- Linux文件操作的主要接口API及相关细节
		操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ... 
- python 文件操作(转)
		python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ... 
- python文件操作
		总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ... 
- Python之路第一课Day3--随堂笔记(文件操作)
		一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ... 
- 关于Python中的文件操作(转)
		总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ... 
- 关于python文件操作
		http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html 总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理 ... 
随机推荐
- MySQL官方教程及各平台的安装教程和配置详解入口
			官方文档入口: https://dev.mysql.com/doc/ 一般选择MySQL服务器版本入口: https://dev.mysql.com/doc/refman/en/ 在右侧有版本选择: ... 
- linux查找符合条件的文件并删除
			找到根目录下所有的以test开头的文件并把查找结果当做参数传给rm -rf命令进行删除: 1.find / -name “test*” |xargs rm -rf 2.find / -name “te ... 
- Django+Xadmin打造在线教育系统(九)
			xadmin的进阶开发 因版本问题.有些配置可能无效 自定义icon xadmin的图标采用的是第三方css样式font awesome,我们可以进官网下载最新的样式替代原本的,下载地址:http:/ ... 
- 【vijos1780】【NOIP2012】开车旅行 倍增
			题目描述 有\(n\)个城市,第\(i\)个城市的海拔为\(h_i\)且这\(n\)个城市的海拔互不相同.编号比较大的城市在东边.两个城市\(i,j\)之间的距离为\(|h_i-h_j|\) 小A和小 ... 
- BSGS&扩展BSGS
			BSGS 给定\(a,b,p\),求\(x\)使得\(a^x\equiv b \pmod p\),或者说明不存在\(x\) 只能求\(\gcd(a,p)=1\)的情况 有一个结论:如果有解则必然存在\ ... 
- MT【294】函数定义的理解
			已知函数$f(x)$的定义域为$D,\pi\in D$.若$f(x)$的图像绕坐标原点逆时针旋转$\dfrac{\pi}{3}$后与原图像重合,则$f(\pi)$不可能是( )A$\dfrac{ ... 
- LOJ2255. 「SNOI2017」炸弹 (线段树)
			本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ... 
- HAOI2015 简要题解
			「HAOI2015」树上染色 题意 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0 \sim N\) 之内的正整数 \(K\),你要在这棵树中选择 \(K\) 个点,将其染成黑色,并将 ... 
- uvaLive7303 Aquarium (kruskal)
			题意:给R*C的房间,每个房间被左上-右下或右上-左下的墙分割为两个小房间,将分割移除有一定花费,问使所有小房间联通需要的最小花费 把每个房间分成左右(上下?)两个点,判一判,本来就联通的加零边,一个 ... 
- 8、16、32-BIT系列单片机区别与特点
			一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ... 
