我有一个bed文件(一个由制表符分隔的列组成的txt文件(。第四列的名称后面跟着数字。使用命令行(Linux(,我希望获得这些名称,不要重复。A提供了以下示例。
这是我的文件:
$head example.bed
1 2160195 2161184 SKI_1.2160205.2161174
1 2234406 2234552 SKI_1.2234416.2234542
1 2234713 2234849 SKI_1.2234723.2234839
1 2235268 2235551 SKI_1.2235278.2235541
1 2235721 2236034 SKI_1.2235731.2236024
1 2237448 2237699 SKI_1.2237458.2237689
1 2238005 2238214 SKI_1.2238015.2238204
1 9770503 9770664 PIK3CD_1.9770513.9770654
1 9775588 9775837 PIK3CD_1.9775598.9775827
1 9775896 9776146 PIK3CD_1.9775906.9776136
...
我的列表应该是这样的:
SKI_1
PIK3CD_1
...
请帮我输入我需要使用的代码好吗?
我几年前就用grep找到了解决方案,但我丢失了用来保存所有有用代码的文档。
给定so.txt
:
1 2160195 2161184 SKI_1.2160205.2161174
1 2234406 2234552 SKI_1.2234416.2234542
1 2234713 2234849 SKI_1.2234723.2234839
1 2235268 2235551 SKI_1.2235278.2235541
1 2235721 2236034 SKI_1.2235731.2236024
1 2237448 2237699 SKI_1.2237458.2237689
1 2238005 2238214 SKI_1.2238015.2238204
1 9770503 9770664 PIK3CD_1.9770513.9770654
1 9775588 9775837 PIK3CD_1.9775598.9775827
1 9775896 9776146 PIK3CD_1.9775906.9776136
然后下面的命令应该可以完成任务:
cat so.txt | awk '{split($4,f,".");print f[1];}' | sort -u
$4
为第4列- 我们在
.
字符上拆分第4列。结果放入f
数组 - 最后我们用
sort -u
过滤掉重复项
在文件床中使用数据并使用awk:
awk 'NR>1 { split($4,arr,".");bed[arr[1]]="" } END { for (i in bed) { print i } }' bed
忽略第一行,然后将第四个空格分隔的字段拆分为基于"的数组arr"将此数组的第一个索引放入另一个床数组中。在结束块中,循环浏览床阵列并打印索引。
使用grep:
cat example.bed|awk '{print $4}'|grep -oP 'w+_d+'|sort -u
生产:
PIK3CD_1
SKI_1
并且没有cat
命令(因为这里总是有UUOC倡导者..(:
awk '{print $4}' < example.bed|grep -oP 'w+_d+'|sort -u
我发现了这个:
head WRGL2_hg19_v1.bed | cut -f4 | cut -d "." -f1
输出:
PIK3CD_1
SKI_1