結果:

結果:

次のような複数の列を含むテキストファイルがあります。

 1 102.0184 109.5487 107.3716
 2 100.2430 107.5874 108.7558
 3 103.9029 105.7406 106.9046
 4 102.7495 108.1275 104.4731
 5 102.8825 105.6664 107.2141
 6 104.5323 108.8850 106.0267
 7 103.0479 107.3056 105.5108
 8 101.2433 108.6113 107.2551
 9 104.4821 108.4339 105.9864
 10 101.5879 106.3859 102.825

次に、2番目の列のように、次のようにフィルタリングします。

awk '$2<104 {print $1,$2}' file.txt 

これを得ました:

1   102.0184
2   100.2430
3   103.9029
4   102.7495
5   102.8825
7   103.0479
8   101.2433
10  101.5879

最初の列の連続した範囲をすべて別のファイルに印刷したいので、この例では3つの出力ファイルがあります。

file_1-5.tmp
1   102.0184
2   100.2430
3   103.9029
4   102.7495
5   102.8825
file_7-8.tmp
7   103.0479
8   101.2433
file_10.tmp
10  101.5879

どうすればいいですか?ファイル内のすべての列に対してこのルーチンをどのように拡張できますか?私はこの問題を複数のファイルに適用したいので、この問題に対する一般的な解決策(この例で提供されている特定の範囲に依存しない)があることを願っています。

ベストアンサー1

1行awkコマンド:

awk -v P=-1 '$2<104 {if ($1>P+1)N=$1;P=$1;print $1,$2>"file"N".tmp"}'

結果の提供(ファイル名が気に入らない場合)

==> file1.tmp <==
1   102.0184
2   100.2430
3   103.9029
4   102.7495
5   102.8825

==> file7.tmp <==
7 103.0479
8 101.2433

==> file10.tmp <==
10 101.5879

おすすめ記事