1

テキスト ファイルを読み取り、(t:) で始まるすべての行を出力するループを作成しようとしています。ループは、(t:) という単語を含む最大 200 行を出力ファイルに出力する必要があります。(t:) で始まる残りの単語は、他の output.file に出力する必要があります。これを行う方法は?

基本的に、スクリプトが行うべきことは、200 行を超えて出力しないことです。200 行を超える場合は、残りの行を別の出力ファイルに出力する必要があります。

例えば

テキストファイルに含まれる

(t:) should print in other output.
sfsfsaff
(t:) blablabla
(t:) should print in other output.
(t:) blablalbalbalbalba
 blalblabalbalbab
balbalbablaba
balbablalbalba
balbalbalbab
ablablalbab.
(t:) blablabla
(t:) blablabla

output.txt

    (t:) should print in other output.
    (t:) blablabla
    (t:) should print in other output.
    (t:) blablalbalbalbalba
    (t:) blablabla
    (t:) blablabla
4

3 に答える 3

3

そのためのループも必要ありません。既存のツールを使用して、古き良き UNIX の伝統でそれらを組み合わせることができます。

cat inputfile | grep "^t\:" | split -l 200

もちろんt:、出力で必要ない場合は、先頭を除外するなどの変更を行うことができます...

詳細については、grepおよびsplitコマンドのマニュアル ページを参照してください。

于 2013-05-06T08:35:55.210 に答える
1

次の awk スクリプトを使用します。

awk '/^\(t:\)/{if(++c <= 200){print >> "outfile1"}else{print >> "outfile2"}}' infile

于 2013-05-06T08:40:07.140 に答える
0
>file1; >file2; N=0; cat myfile | while read f; do T=`echo "$f" | grep "^t:"`; if [ "$T"x = x ] then; N=`expr $N + 1`; fi; if [ "$N" -lt 200 ] then; echo "$f" >> file1; else; echo >> file2; fi; done

これは事実上すべてのシェルで機能し、シェルとして bash に依存していません。

于 2013-05-06T08:37:35.193 に答える