在大文件上有效地提取列/正则表达式

时间:2015-08-07 15:40:32

标签: regex awk

我需要从我拥有的文件中提取一些信息。我以前在R中做过这个,但文件非常非常大,而且需要很长时间,所以我觉得使用命令行工具是一个更好的选择。

该文件基本上由100个制表符分隔的列组成,我只对第1列,第2列和第4列感兴趣。

文件中前四列的示例:

10  rs149353603:74656:C:G   0   74656   ...
10  rs140638708:75794:G:T   0   75794   ...
10  rs201043140:76210:A:G   0   76210   ...
10  rs202007578:76294:T:C   0   76294   ...
10  rs75914453  0   77582   ...

我希望它的格式为第2列,第1列,第4列。此外,我想在第二行中有一个冒号(第一个冒号之前的所有内容)的情况下修剪除第一个rs#之外的所有内容。

E.g。第一行是

rs149353603 10  74656

当我有时间的时候,我完全打算学习awk,但现在不幸的是现在不是这样!有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你可以使用这样的awk命令:

awk 'BEGIN{FS=OFS="\t"} {sub(/:.*$/, "", $2); print $2, $1, $4}' file
rs149353603 10  74656
rs140638708 10  75794
rs201043140 10  76210
rs202007578 10  76294
rs75914453  10  77582

答案 1 :(得分:0)

由于您的文件非常大,您可能会发现首先使用“cut”更快,沿着以下管道行:

cut -f 1,2,4 | awk ....