首页 > > > 脑洞大开! Linux 里面还有这样的操作!
作者:ywliao
原文地址:http://www.cnblogs.com/ywliao/p/7224763.html
1. 把当前文件夹的文件名用 "," 连接成一行,或者将多行转变为一行
ls | paste -s -d "," # -s 选项将输入进行一次性粘贴
ls | xargs | sed 's/ /,/g' #xargs 将输入作为参数(空格分隔)传入
ls | awk '{printf "%s,",$0}'
2. 将行逆序输出
sed '1!G;h;$!d'file # 1!G 第一行不执行 G 命令,从第二行开始执行;$!d 最后一行不删除;
第一行自动存入模式空间,将模式空间内容(第一行)放到保持空间 (h),
然后删除模式空间内容 (d,否则它会自动输出),第二行自动存入模式空间,
(开始用 G)将保持空间(第一行内容)接到模式空间(第二行)后,
将当前模式空间(第二行 + 第一行)放到保持空间(h),
然后删除当前模式空间 (d),依次类推,
最后一行不删除模式空间,再自动输出模式空间内容
3. 删除 #开头的注释行
sed '/^#.*/d' test.txt
4. 去掉每行开头 4 个字符
cut -c 4- test.csv
5. 对文件第一列进行统计
awk -F "," '{count[$1]++} END{for (record in count) print record,count[record] }' test.csv #count[$1]++创建关联数组count[$1]并进行计数
6. 对文件第四列用 ":" 切割成两列并将最后一列结果 + 1,然后输出全部列
awk -F "," '{split($4,array,":");print $1,$2,$3,array[1],array[2]+1}' test.csv #split切割$4存到数组array中,array[1]和arrya[2]即为切割后的两个区域
7. 对文件第二列求均值
awk -F "," '{sum+=$2} END {print "Average = ", sum/NR}' test.csv
8. 实现 DNA 序列反向互补
cat seq.txt | sed 'y/ATGC/TACG/' |rev
9. 某一行插入另外一个文件的内容
sed '2 r a.txt' test.csv
10. 对一个文件按照第一列进行筛选,筛选条件是必须在另外一个文件的第一列出现过
awk -F "," '{if(NR==FNR){count[$1]=1}else if(count[$1]==1){print $0}}' chr.txt test.csv #将第一个文件第一列的值存入关联数组,并给值为1,如果第二个文件建立的关联数组对应值为1,说明在第一个文件第一列出现过,则输出整行
11. 对文件第二列和第三列进行展开
展开前四列

展开后成为三列

awk -F "," '{for (i=$2;i<=$3;i++) {print $1,i,$4}}' test.csv
12. 对三个文件依次 merge
这里三个文件行数相等,其中 ampl 列将新的和旧的染色体、位置联系起来,第一个文件将第五列(ampl 列,值为 ampl1,ampl2...)存入一二三列(旧染色体,旧起始位置,旧结束位置)为下标的关联数组 ampl,第二个文件按照一二三列(旧染色体,旧起始位置,旧结束位置)取出关联数组的值 (ampl1,ampl2...),将关联数组的值作为关联数组下标新创建关联数组 Ampl,将第二个文件的值(1,2,3,4,5 列,其中 4、5 列是我们要的信息)用 sprintf 生成字符串存入 Ampl,第三文件按照第四列(ampl1,ampl2...),用 split 切割 sprintf 生成的字符串,取出第二个文件存入的值(这里只取出了需要的 4,5 列,123 列的值输出第三个文件的 123 列(新染色体,新起始位置,新结束位置)的值)。这样 Oldpanelstartend.sort.bed 对应的旧的染色体和位置,被 hg38ampliconstartend.bed 新的一个染色体和位置取代,并且将旧文件染色体和位置在 amplGChg19.txt 对应的信息成功转移到新生成的新位置文件中
awk 'BEGIN{FS="\t";OFS="\t"}{if(NR==FNR){ampl[$1,$2,$3]=$5;N=NR}else if(NR<=2*N){Ampl[ampl[$1,$2,$3]]=sprintf("%s,%d,%d,%s,%s",$1,$2,$3,$4,$5);}else{split(Ampl[$4],array,",");print $1,$2,$3,array[4],array[5],$4}}' Oldpanel_start_end.sort.bed amplGChg19.txt hg38amplicon_start_end.bed | sort -k1 > hg38amplicon_Gene_GC.txt
13. 对两个文件去重取并集
cat NewpanelGene.bed Oldpanel.gene.bed | sort -u > merge.gene.bed #sort -u = sort | uniq ,相当于sort 之后,将重复相邻行变成只有一行
14. 对文件按照标志开头的行进行分割
比如

awk '/>chr/{split($0,array,">");out=array[2]};{print > out}' test.fa
输入 chr1,chr2 两个文件

SACC2017

SACC2017
作为国内最受欢迎的架构师盛会,2017 第九届中国系统架构师大会 (SACC) 将于将于 2017 年 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。
大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
点击阅读原文立享6.8折优惠~
原文作者:;如有侵权,请联系管理员删除。