У меня есть текстовый файл с разделителями табуляции, содержащий C1 ...Cn столбцы и строки R1-Rn. Столбец 10 (C10) имеет поле 'X' = четыре целочисленных значения через запятую (X = a, b, c, d). Я хотел бы сделать небольшую арифметическую операцию на C10, такую как (a/(a+b+c+d)) * 100 и поместить результаты как новый столбец (Cn+1), добавив тот же файл ИЛИ в новый выход файл.

(1) Кто-нибудь может мне помочь с сценарием оболочки Unix, чтобы сделать это для одного файла?

(2) Если я хочу выполнить циклический расчет одних и тех же вычислений для нескольких файлов, можете ли вы помочь мне с оболочкой оболочки?

2 ответа2

1

Используйте метод awk

awk -F'\t' '{ A=$10;gsub(/X=/,"",A); split(A,B,","); print $0"\t"(B[1]/(B[1]+B[2]+B[3]+B[4]))*100 }' input.txt > output.txt
0

Perl на помощь!

perl -nlaF '\t' -e ' my ($A, $B, $C, $D) = split /,/, $F[9];
                     print "$_\t", 100*$A/($A+$B+$C+$D);
                   ' input-file > output-file
  • -n читает строку ввода построчно
  • -l обрабатывает новые строки в print .
  • -a разделяет ввод на то, что указывает -F
  • $_ содержит строку, прочитанную из ввода

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .