次のような複数の列を含むテキストファイルがあります。
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