2013-03-08 40 views
1

我学习bash中的每一行持续人物和我有50万行的文件,他们每个人都有这样的模式:采取从文件

NNNNNNNN NNNNNNÇ

N =号| C = char A-Z |第一个空间是标签,第二个是空间。

我想用最后一部分创建一个文件,从第二列数字开始(NNNNNN C)使用bash脚本。我能够做到这一点:

i=1 
while [ $i -le 500000 ] 
do 
    echo $i 
    sed $i"q;d" $1 | tail -c 9 >> file 
    ((i++)) 
done 

但它需要时间,因为它将逐行写入文件中的每一行。我怎样才能更快地做到这一点?

感谢

回答

1

使用cut,默认情况下使用制表符作为分隔符。

阅读infile并把字段(-f)2起(2-)为file

cut -f2- infile > file 
+1

伟大而简单。我已经阅读了手册页,我也可以用'cut -c 10-17 $ 1> $ 2'来完成它,并使用参数。谢谢! – Fdiazreal 2013-03-10 22:45:11

+0

很高兴我的回答帮了你。通常最简单的工具是最好的。 – Johnsyweb 2013-03-11 04:23:37

2

您可以使用read分割每行成词,然后打印你想要的:

while read a b c; do 
    echo "$b $c" 
done <input_file> output_file 
+0

这完美的作品,我想我会在其他类型的文件使用它。谢谢! – Fdiazreal 2013-03-10 22:43:52

1

是的,这将需要一段时间。虽然您的DIY精神需要使用bash来表扬,但这类任务通常需要使用专为此类任务设计的unix工具。

试试这个

sed 's/^.*<T>//' file > outFile 

其中<T>要么是 '\ t' 或文字标签字符,这取决于你的sed的版本。

这会删除文件中每行的第一个选项卡,然后打印outFile中剩下的内容。 IHD。

IHTH。

+0

对于使用RegEx的其他文件将非常有用。谢谢! – Fdiazreal 2013-03-10 22:47:51