Поиск значений ниже порогового значения в нескольких столбцах с использованием awk или другого сценария bash.

Я хотел бы извлечь строки файла, в которых определенные столбцы имеют значение ‹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.

Спасибо

Сэм


person user1911823    schedule 18.12.2012    source источник
comment
I tried this using awk, but it would only work doing it a very long way. Сколько времени нужно для выполнения вашей команды?   -  person    schedule 18.12.2012
comment
Там опечатка, эта строка: 74.9 0.006 59.6 0.061 72.2 0.002 не совпадает с этой строкой: 74.9 0.006 59.6 0.051 72.2 0.002   -  person Steve    schedule 18.12.2012
comment
@skwllsp: Я думаю, он имеет в виду, что выписать все возможные комбинации просто заняло бы много времени...   -  person Steve    schedule 18.12.2012
comment
Извините за опечатку - оба должны читаться как первый пример, указанный Стивом.   -  person user1911823    schedule 18.12.2012


Ответы (1)


Возможно, это то, что вы ищете. Он будет искать каждый столбец с четным номером и проверять, что каждый из этих столбцов содержит числа меньше «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
person Steve    schedule 18.12.2012
comment
Да. Это именно то, что мне нужно! Спасибо. - person user1911823; 18.12.2012