2

特定の列の値が0.05未満のファイルの行を抽出したいと思います。

たとえば、$2または$4または$6の値が0.05未満の場合、その行を新しいファイルに送信します。これらの列のいずれかに0.05を超える値を持つ行は必要ありません

cat File_1.txt 
S_003   P_003   S_006   P_006   S_008   P_008
74.9    0.006   59.6    0.061   72.2    0.002
96.2    0.003   89.4    0.001   106.9   0.000
105.8   0.003   72.6    0.003   86.7    0.002
45.8    0.726   38.5    0.981   43.9    0.800
50.7    0.305   47.8    0.314   46.6    0.615
49.9    0.366   50.4    0.165   48.2    0.392
42.5    0.920   43.7    0.698   40.3    0.970
46.3    0.684   42.9    0.760   47.7    0.438
192.4   0.001   312.8   0.001   274.3   0.001

私はawkを使用してこれを試しましたが、非常に長い道のりでしか機能しませんでした。

awk ' $2<=0.05' file_1.txt > file_2.txt
awk ' $4<=0.05' file_2.txt > file_3.txt

など、そして望ましい結果を達成しました

96.2    0.003   89.4    0.001   106.9   0.000
105.8   0.003   72.6    0.003   86.7    0.002
192.4   0.001   312.8   0.001   274.3   0.001

しかし、私のファイルは198列と57000行です

また、運が悪かったので、awkコマンドを一緒に配管してみました。$2しか検索しません

awk ' $2<=0.05 || $4=<0.05' File_1.txt > File_2.txt

74.9    0.006   59.6    0.051   72.2    0.002
96.2    0.003   89.4    0.001   106.9   0.000
105.8   0.003   72.6    0.003   86.7    0.002
192.4   0.001   312.8   0.001   274.3   0.001

私はこれにかなり慣れていないので、awkを使用してこれを実現する方法についてアドバイスをいただければ幸いです。

ありがとう

サム

4

1 に答える 1

2

おそらく、これはあなたが探しているものです。偶数の列をすべて検索し、これらの列のそれぞれに「0.05」より小さい数値が含まれていることを確認します。

awk 'NF>1 { for(i=2;i<=NF;i+=2) if ($i>0.05) next }1' File_1.txt

結果:

96.2    0.003   89.4    0.001   106.9   0.000
105.8   0.003   72.6    0.003   86.7    0.002
192.4   0.001   312.8   0.001   274.3   0.001
于 2012-12-18T05:58:32.350 に答える