4

ファイルtest.txtがある場合:

example 1 content 2013-3-8:
hello java
example 2 content 2013-4-9:
hello c

awk または sed を使用して、test.txt を 2 つのファイルに分けるにはどうすればよいですか

テスト1

hello java

テスト2

hello c

以下のコマンドを使用します。

awk '/example/{i++}{print > "test"i}' test.txt

しかし、それは最初の行 (xxx の例) のままです。最初の行を削除するために awkの印刷にフラグメントを追加できますか?

4

7 に答える 7

2

を使用getlineして、最初の行をスキップできます。以下は、目的の出力を提供する必要があります。

awk '/example/{getline; i++}{print > "test"i}' test.txt
于 2013-10-29T05:47:14.493 に答える
1

sed でこれを行う奇妙な方法:

sh <<< $(sed '/example/{N;s/\n//;s/example \([0-9]*\).*:\(.*\)/echo "\2" >> test\1;/}' input)
于 2013-10-29T08:04:49.450 に答える
1

これはうまくいくかもしれません(GNU sed):

sed -ne '2~4w test1.txt' -e '4~4w test2.txt' test0.txt
于 2013-10-29T10:34:14.360 に答える
0
sed -n "
/example 1/ {N;s/^.*\n//
   w test1.txt
   }
/example 2/ {N;s/^.*\n//
   w test2.txt
   }" test.txt

セクション間に区切り文字を定義する (サイズまたはマーカーを定義する) 場合、各ファイルに入れるテキストが増える可能性があります

于 2013-10-29T07:56:22.170 に答える
0

Alok Singhal からの応答を完了するには: Linux で「開いているファイルが多すぎる」制限に達した場合は、ファイルを順番に閉じる必要があります。

awk '/^example/ {close("test" i); i++; next } { print >"test" i}'
于 2014-03-12T14:02:26.890 に答える