1

私はbashを学習していて、500000行のファイルがあり、それぞれに次のパターンがあります。

NNNNNNNN NNNNNN C

N=数値| C = char AZ | 最初のスペースはタブで、2番目のスペースは通常のスペースです。

bashスクリプトを使用して、数字の2番目の列( NNNNNN C )から始まる最後の部分を含むファイルを作成したいと思います。私はそれを行うことができました:

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

ただし、各行を1つずつファイルに書き込むため、時間がかかります。どうすればこれをより速く行うことができますか?

ありがとう

4

3 に答える 3

2

read各行を単語に分割してから、必要なものを印刷するために使用できます。

while read a b c; do
  echo "$b $c"
done < input_file > output_file
于 2013-03-08T21:49:02.147 に答える
1

はい、それはしばらく時間がかかります。そして、DIYの精神はbashの使用で称賛されるべきですが、この種のタスクは通常、そのようなタスク用に設計されたunixツールで処理されます。

これを試して

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

sedのバージョンに<T>応じて、'\t'またはリテラルタブ文字のいずれかです。

これにより、ファイルの各行の最初のタブまでのすべてが削除され、残っているものがoutFileに出力されます。

IHTH。

于 2013-03-08T21:49:35.237 に答える
1

を使用cutします。これは、デフォルトでタブを区切り文字として使用します。

infileフィールド(-f)2以降(2-)を読み取って次の場所に配置するにはfile

cut -f2- infile > file
于 2013-03-08T21:51:02.680 に答える