【发布时间】:2018-09-27 19:43:43
【问题描述】:
我有一个看起来像这样的文件,它有 2 列(空格分隔):
chr1.21.imputed_info:1 100880328
chr1.31.imputed_info:1 10566215
chr1.23.imputed_info:--- 110198129
chr1.23.imputed_info:--- 114445880
chr1.24.imputed_info:--- 118141492
chr1.25.imputed_info:--- 120257110
chr1.25.imputed_info:1 121280613
chr1.30.imputed_info:--- 121287994
chr1.30.imputed_info:--- 145604302
我想提取“chr”后面的数字,从 1-22 到第二列。所以我的输出看起来像这样:
1 100880328
1 10566215
1 110198129
1 114445880
1 118141492
1 120257110
1 121280613
1 121287994
1 145604302
一些重要的注意事项:
- 正如我所说,“chr”后面的数字是从 1 到 22,因此它可以是 chr1、chr2 ... chr22。
chr1、chr2 等后面的数字可能超过 50。因此,例如,您可以使用 chr1.50 或 chr2.45 等
column1 末尾的“info:”部分可能类似于 info:1, info:2.. info:22 OR info:---
我在 Bash 中想出了这个:
cat file.txt | sed 's/chr//g' | sed 's/.imputed_info://g'
这让我非常接近,但它做到了:
1.211 100880328
1.31 10566215
1.23--- 110198129
1.23--- 114445880
1.24--- 118141492
1.25--- 120257110
1.251 121280613
1.25--- 121287994
1.30--- 145604302
1.301 149906413
我知道在 R 和 Python 中有一些方法可以做到这一点,但我应该说这是一个巨大的文件,所以通过 Bash 可以节省大量时间。所以如果有人有一个不错的(理想情况下是干净的解决方案 - 我有意识到我的 sed 命令有点丑)它会很棒。谢谢。
【问题讨论】:
-
预期输出中的前导空格是什么意思?
-
您实际上并不需要两个
sed命令。也许试试awk -F'[a-z. -]+' '{print $2,$6}' file.txt。