为txt文件中的列提取一组字符



我有一个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
  1. $4为第4列
  2. 我们在.字符上拆分第4列。结果放入f数组
  3. 最后我们用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

最新更新