从制表符分隔表中提取文本子字符串

时间:2014-05-02 21:17:21

标签: linux perl sed

我有一个非常大的制表符分隔列(225,000行乘16列)文件,我想从中提取每行的子字符串并创建一个单独的文件。例如,这是一行字符,我想在gi |之间提取数字516315992和|并为所有225,000行做到这一点。

这是表中的一行,例如:

M01522:132:000000000-A4LNU:1:2114:14381:3858    gi|516315992|ref|WP_017712686.1|    317 153 19  74  2e-09   60.1    53.57   56  25  1   1223    N/A N/A hypothetical protein [Prochlorothrix hollandica]

我想从该文本字符串中提取数字516315992,并将一个表(一列,n行)放入一个单独的文件中。

我是一个真正的新手,但愿意花时间。

感谢您的帮助。

小心

劳尔

4 个答案:

答案 0 :(得分:1)

您可以使用此oneliner:

perl -F"\|" -a -ne 'print "$F[1]\n"' input.txt > result.txt

请注意,-F将分割输入的模式作为参数。然后oneliner中的数组@F包含拆分后产生的字段。

输出重定向到result.txt

有关Perl命令行开关的详细信息,请参阅perlrun

答案 1 :(得分:0)

在一个班轮中:

perl -ne 'print "$1\n" if /gi\|([^|]*)/' file.txt

答案 2 :(得分:0)

这可能适合你(GNU sed):

 sed 's/^[^|]*|\([^|]*\)|.*/\1/' file

答案 3 :(得分:0)

如果文件中的数据都采用相同的格式,那么这个简单的awk应该这样做:

awk -F\| '{print $2}' org_file > new_file

|分割文件并打印第二列。