我有一个制表符分隔的文本文件,其中包含 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
根据指定内容分割输入$_
包含从输入读取的行