2013-03-08 72 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