Настройка Samba для обмена файлами с хостом Linux для клиентов Windows

С вашей таблицей очень сложно работать , но один из способов сделать это — разбить работу на несколько шагов. Прежде всего сохраните свои данные в файле с именем data.txt, затем:

  • преобразовать таблицу в столбцы с фиксированной -шириной и заменить пробелы " ", знак равенства =, а также двоеточие ";"на столбцы "\t". Этого можно добиться, комбинируя функции из sedи awkследующим образом:

sed 's/=/\t/g; s/;/\t/g' data.txt | awk '{printf "%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}'

выход:

1      119  .     A     T     1000  PASS  MID   183   S     0     DOM   0.5   PO    1     GO    337   MT    1    AC    3     DP    1000  MULTIALLELIC GT    0|0   1|0   0|0   0|0        
1      119  .     A     T     1000  PASS  MID   362   S     0     DOM   0.5   PO    1     GO    562   MT    1    AC    2     DP    1000  MULTIALLELIC GT    0|0   1|0   0|1   0|0  
  • Суммируйте значения в определенном столбце, в вашем случае номер столбца #21. Вы можете сделать это, направив вывод предыдущего шага в следующую команду:

awk '{ sum21+=$21} END {print sum21}')

выход:

5

-извлеките первую строку из таблицы с помощью следующей команды:

sed 's/=/\t/g; s/;/\t/g' data.txt| awk '{printf "%-5s  %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}' | head -1

выход:

1      119  .     A     T     1000  PASS  MID   183   S     0     DOM   0.5   PO    1     GO    337   MT    1    AC    3     DP    1000  MULTIALLELIC GT    0|0   1|0   0|0   0|0        

-Замените значение field #21из предыдущего шага значением sum-valueстолбца #21 и reconstruct the spaces, colons and the other symbolsисходной таблицы следующим образом:

awk '{print $1,$2,$3,$4,$5,$6,$7,$8"="$9";"$10"="$11";"$12"="$13";"$14"="$15";"$16"="$17";"$18"="$19";"$20,"=",$21='$sum'";"$22"="$23";"$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}'

выход:

1 119. A T 1000 PASS MID=183;S=0;DOM=0.5;PO=1;GO=337;MT=1;AC = 5;DP=1000;MULTIALLELIC GT 0|0 1|0 0|0 0|0    

В bash это можно сделать следующим образом:

#!/bin/bash
sum_col21=$(sed 's/=/\t/g; s/;/\t/g' data.txt| awk '{printf "%-5s  %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}' | awk '{ sum21+=$21} END {print sum21}')

first_row=$(sed 's/=/\t/g; s/;/\t/g' data.txt| awk '{printf "%-5s  %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}' | head -1)


echo $first_row | awk '{print $1,$2,$3,$4,$5,$6,$7,$8"="$9";"$10"="$11";"$12"="$13";"$14"="$15";"$16"="$17";"$18"="$19";"$20,"=",$21='$sum_col21'";"$22"="$23";"$24,$25,$26,$27,$28,$29,$30,$31,$32,$33}'

Это решение будет обновлено после дополнительных необходимых пояснений в тексте вопроса.

0
02.01.2021, 03:36
1 ответ

Это связано с SELinux. Я рекомендую прочитать, как правильно переименовать каталог для общего ресурса samba с помощью SELinux.

0
18.03.2021, 22:39

Теги

Похожие вопросы