美文网首页
【Linux 基础】六、文本处理实战及习题

【Linux 基础】六、文本处理实战及习题

作者: 佳奥 | 来源:发表于2022-07-21 09:42 被阅读0次

写在前面

经常出现没有写入权限,那么就赋予全部权限:

sudo chmod -R 777 xxx/

ls -l
drwxrwxrwx 5 root root 4096  7月 17 18:26 biosoft

即可。

1 下载处理文本

先从文章里确定项目编号SR,再进入:

https://www.ncbi.nlm.nih.gov/Traces/study/?acc=SRP078156

比如示例的是PRJNA398328,直接输入

https://www.ncbi.nlm.nih.gov/Traces/study/?acc=PRJNA398328

image.png
选择下载Metadata和Accession List的.txt文件,导入Linux服务器的对应目录。

这里使用FileZilla。

$ ls
SraRunTable.txt  SRR_Acc_List.txt

2 查看下载文本

grep 筛选数据

查看一下文档,整理S并显示行数N
$ less -SN SraRunTable.txt

      1 Run,Age,Assay Type,AvgSpotLen,Bases,BioProject,BioSample,BioSampleModel,Bytes,Center Name,Consent,DATASTORE filetype,DATASTORE provider,DATA>
      2 SRR5933808,not collected,WXS,202,9582521046,PRJNA398328,SAMN07504110,Model organism or animal,4085555030,WEILL CORNELL MEDICINE,public,"fast>
      3 SRR5933809,not collected,WXS,202,8418510792,PRJNA398328,SAMN07504109,Model organism or animal,3697215278,WEILL CORNELL MEDICINE,public,"fast>
      4 SRR5933810,not collected,RNA-Seq,102,6355599396,PRJNA398328,SAMN07504108,Model organism or animal,2316762214,WEILL CORNELL MEDICINE,public,">
      5 SRR5933811,not collected,WXS,202,5304098426,PRJNA398328,SAMN07504107,Model organism or animal,2002077896,WEILL CORNELL MEDICINE,public,"fast>

查找RNA
$ grep RNA SraRunTable.txt
image.png

结果标红

统计RNA个数
$ grep RNA SraRunTable.txt  | wc
     88     991   34169
88个

查看另一个文件,把前十个内容输入到id文件
$ head SRR_Acc_List.txt > id

$ ls
id  SraRunTable.txt  SRR_Acc_List.txt

$ cat id
SRR5933808
SRR5933809
SRR5933810
SRR5933811
SRR5933812
SRR5933813
SRR5933814
SRR5933815
SRR5933816
SRR5933817

更名一下便于查找:
$ mv SraRunTable.txt info
$ mv SRR_Acc_List.txt allid

把id中的编号再info中查找,结果显示十行(也可以 grep -c 计数)
$ grep -f id info |wc
     10     120    3904

grep只想查找完全一样的数据(精确匹配)
$ grep -w SRR59338 id 
即可

查找以S为开头的内容:
$ grep '^S' info

反向匹配,输出不含S开头内容:
$ grep -v '^S' info
查看抬头内容:
$ head -1 info
Run,Age,Assay Type,AvgSpotLen,Bases,BioProject,BioSample,BioSampleModel,Bytes,Center Name,Consent,DATASTORE filetype,DATASTORE provider,DATASTORE region,Experiment,Genotype,Instrument,Library Name,LibraryLayout,LibrarySelection,LibrarySource,Mouse_number,Organism,Platform,primary_tumor_index,ReleaseDate,Sample Name,sequencing_type,sex,SRA Study,strain,tissue,treatment,tumor_index,replicate_number

把,隔开转化为换行展示:
$ head -1 info | tr ',' '\n'
Run
Age
Assay Type
AvgSpotLen
Bases
BioProject
BioSample
BioSampleModel
Bytes
略

用cat显示行数
$ head -1 info | tr ',' '\n'| cat -n
     1  Run
     2  Age
     3  Assay Type
     4  AvgSpotLen
     5  Bases
     6  BioProject
     7  BioSample
     8  BioSampleModel
     9  Bytes
    10  Center Name

我们想要展示
 34  tumor_index
这个数据,如果info没有分隔符,只有空格隔开
cut -f 34 info

由于本数据有分隔符, 所以需要这样:
$ cut -d ',' -f 34 info
SRP115453
SRP115453
SRP115453
SRP115453
SRP115453
SRP115453
略

摘选想要的部分:
$ cut -d ',' -f 1,16,22,25,27,32 info
SRR5934048,"gs.US,75bp PE",TRANSCRIPTOMIC,Mus musculus,RNAseq
SRR5934049,"gs.US,101bp PE",GENOMIC,Mus musculus,WEX
SRR5934050,"gs.US,75bp PE",TRANSCRIPTOMIC,Mus musculus,RNAseq
SRR5934051,"gs.US,101bp PE",GENOMIC,Mus musculus,WEX

把,分割改为空格分割
$ cut -d ',' -f 1,16,22,25,27,32 info | tr ',' '\t'
SRR5934047      "gs.US  101bp PE"       GENOMIC Mus musculus    WEX
SRR5934048      "gs.US  75bp PE"        TRANSCRIPTOMIC  Mus musculus    RNAseq
SRR5934049      "gs.US  101bp PE"       GENOMIC Mus musculus    WEX
SRR5934050      "gs.US  75bp PE"        TRANSCRIPTOMIC  Mus musculus    RNAseq
SRR5934051      "gs.US  101bp PE"       GENOMIC Mus musculus    WEX
使用sed也是一样的效果。
$ cut -d ',' -f 1,16,22,25,27,32 info | sed 's/,/\t/g'
在NCBI下载了人类的染色体注释文件
$ less -S Genome\ assembly\ GRCh38.p14.gtf
image.png
查看第一列
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | head

查看唯一值
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | sort -u | head
查看唯一值并计数
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | sort | uniq -c
418636 NC_000001.11
 370305 NC_000002.12
 287682 NC_000003.12
 188260 NC_000004.12
 179029 NC_000005.10
 208242 NC_000006.12
 186504 NC_000007.14
 155350 NC_000008.11

第一列排序,按照数字从小到大顺序
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | sort | uniq -c | sort -k1,1 -n
从大到小
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | sort | uniq -c | sort -k1,1 -n -r
查看最大前20个
$ cut -f1 Genome\ assembly\ GRCh38.p14.gtf | sort | uniq -c | sort -k1,1 -n -r | head -20
 418636 NC_000001.11
 370305 NC_000002.12
 287682 NC_000003.12
 232839 NC_000012.12
 230507 NC_000017.11
 227456 NC_000011.10
 208242 NC_000006.12
 196609 NC_000010.11
 191798 NC_000009.12
 188260 NC_000004.12
 186504 NC_000007.14
 
把排序结果导出到临时文件tmp,节省计算资源
$ cut -f1 Homo\ sapiens\ genome\ assembly\ GRCh37.p13.gtf | sort | uniq -c | sort -k1,1 -n -r > tmp

展示文件第一列
$ awk '{print $1}' tmp
175001
146074
129967
111158
100965
91873
91384
90407
略

把文件变成多行
$ sum | awk '{print $1}' tmp | paste -s
175001  146074  129967  111158  100965  91873   91384   90407   90312   90036   82624   79536   76253   70037   69358   62438   55824   55133   3919538960   35421   32839   18614   13624   13552   13180   12915   12660   11201   10531   8787    5689    5071    4520    3649    3194    3170    30082829     2521    2246    1921    1888    1720    1690    1656    1517    1510    1351    1350    1350    1345    1308    1255    1222    1208    12071

添加+号
$ sum | awk '{print $1}' tmp | paste -s -d +
175001+146074+129967+111158+100965+91873+91384+90407+90312+90036+82624+79536+76253+70037+69358+62438+55824+55133+39195+38960+35421+32839+18614+13624

计算总和,bc计算算术表达式
$ sum | awk '{print $1}' tmp | paste -s -d + | bc
2022315

查看gtf文件第三列
$ cut -f3 Homo\ sapiens\ genome\ assembly\ GRCh37.p13.gtf | sort | uniq -c
      1 ###
      1 #!annotation-date 03/07/2022
      1 #!annotation-source NCBI Homo sapiens Updated Annotation Release 105.20220307
 758956 CDS
 977338 exon
  48705 gene 基因
      1 #!genome-build-accession NCBI_Assembly:GCF_000001405.25
      1 #!genome-build GRCh37.p13
      1 #gtf-version 2.2
  70852 start_codon
  70497 stop_codon
  95961 transcript 转录本

想单独查gene
$ cut -f3 Homo\ sapiens\ genome\ assembly\ GRCh37.p13.gtf | grep gene |wc
  48705   48705  243525
与之前结果相符。

只想查询第三列gene
$ awk '{if($3=="gene")print}' Homo\ sapiens\ genome\ assembly\ GRCh37.p13.gtf | wc
  32360 1071208 10074560

补充一些

在文本框复制命令
在Linux中:
cat > tmp

就直接把复制的内容保存在tmp文件中。

3 Linux习题

1、统计/usr/bin/目录下文件个数:
ls /usr/bin | wc -1

2、取出当前系统上所有用户的shell(/bin/bash),每种shell只显示一次,按顺序显示:
cut -d: -f7 /etc/passwd | sourt -u
按出现次数排序
cut -d: -f7 /etc/passwd | sourt | unoq -c | sort -k1,1 -n

3、取出gtf文件的第六行:
head -6 gtf | tail

4、取出/etc/passwd/文件倒数第9个用户名和shell,显示到屏幕并保存到/tmp/users文件(tee又显示又保存)
tail -9 /etc/passwd | head -1 | cut -d: f1,7 | tee /tmp/users

5、显示/etc目录下所有pa开头文件,并统计个数
ls -d /etc/pa* | wc -1

6、显示最近登录5个账号,查找现在多少人登录
last -n 5 | awk '{print $1}'

7、输出a,b,c,d中的字母a
echo "a,c,b,c" | awk -F, '{print $1}'

8、查看系统版本
cat /etc/issue
Ubuntu 22.04 LTS \n \l

9、查看环境变量‘PATH’有多少目录
echo $PATH
env | grep PATH
改为/分隔为换行分割
echo $PATH | tr ':' '\n'|wc
   10      10     125

10、计数bashrc文件行数
wc .bashrc

下一篇我们就专注于数据格式的学习。

我们下一篇再见!

相关文章

网友评论

      本文标题:【Linux 基础】六、文本处理实战及习题

      本文链接:https://www.haomeiwen.com/subject/sshyirtx.html