Получите максимальное и минимальное значения из каждой строки (unix) - PullRequest
0 голосов
/ 13 июля 2020

У меня есть вкладка набора данных, разделенная несколькими столбцами и строками:

ID      v1    v2     v3     v4     v5    v6     v7     v8     
CR_A    2.0657669  1.8515346 2.0644004   0.58573062  2.4229691  1.0294456   1.640186   4.1076807
LR_57   0.83709141 1.097222  1.1135779   0.84598841  1.4768965  0.82643804  1.8255887  2.9050872
CR_t1t  1.3008098  1.0157919 0.76411066 -0.56374447  1.4978799  0.016129955 1.7124357  2.4607684

Я хотел бы иметь минимальные и максимальные значения каждой строки. Например:

CR_A     0.58573062  4.1076807
LR_57    0.84598841  2.9050872
CR_t1t   -0.56374447 2.4607684

Мне удалось вычислить только минимальные значения:

cat file | grep -v ID | awk '{for (i=1;i<=NF;i++) {$1=($i<$1)?$i:$1} print $1}'

Есть предложения?

1 Ответ

3 голосов
/ 14 июля 2020

Я бы поместил все в новый файл

awk  'NR>1{a=0; b=0; for (i=1;i<=NF;i++) if ($i < a || i == 1)a = $i; else if($i > b|| i == 1)b = $i; print $1,a, b}' test.txt > new_file2

NR> 1 пропускает первую строку, которая является именем столбца. Go в каждой строке, сохраните max и min и напечатайте имя, min и max. Надеюсь, это поможет.

Мои результаты. Желаемый результат, который у вас есть выше, неверен, потому что min строки CR_t1t не равен 1.7.1234, как вы написали, а на самом деле 2.4607684.

CR_A 0.58573062 4.1076807
LR_57 0.82643804 2.9050872
CR_t1t -0.56374447 2.4607684
D10 -0.4515 2.2971
...