在 shell 脚本中对制表符分隔的文本文件进行简单的算术运算

在 shell 脚本中对制表符分隔的文本文件进行简单的算术运算

我有一个制表符分隔的文本文件,其中包含 C1...Cn 列和 R1 至 Rn 行。第 10 列 (C10) 有一个字段“X”=四个逗号分隔的整数值 (X=a、b、c、d)。我想对 C10 进行一些小的算术运算,例如 (a/(a+b+c+d))*100,并通过附加相同的文件或将结果放入新的输出文件中,将其作为新列 (Cn+1)。

(1)有人能帮我用 unix shell 脚本来对单个文件执行此操作吗?

(2) 如果我想对多个文件循环执行相同的计算,您能帮我提供一个 shell 包装器吗?

答案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

答案2

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根据指定内容分割输入
  • $_包含从输入读取的行

相关内容