需要你的支持。请帮忙
如果列5是IV,则只考虑ClnN1并从CullN1中取出重复/相同行/值,然后将Cluln6的最小值放在列7中,并在列8中设置最大值,然后需要从列8中减去列7的值,然后加上一个结果,并将最终结果存储在列9和列11中。
还需要在输出文件中commit/delete column(column5和column 6)
例如,输入文件27AAACH1458C1ZZ中的值是6倍,但只需要考虑5行,因为第5列中的一行的值已反转,我们需要放弃该值(需要考虑第5列的值为“INV”的行)。
因此,在7行中,在列6中最小值将是“in 201201800 023 182”,而Max MIMUM值将是“in 20120102424899”,因此需要在列7中设置最小值,并且在列8中需要最大值。
此后,需要考虑第7列和第8列的最后8位数字,并从第8列减去第7列。然后需要将减法结果加/加1并存储在第9列和第11列中。需要跳过/删除输出文件中的第5列和第6列。

    a|b|c|d|e|f|g|h|i|j|k
    27AAAC8C1ZZ|042018|||INV|IN27201800023521|||||
    27AAAC8C1ZZ|042018|||INV|IN27201800024289|||||
    27AAAC8C1ZZ|042018|||INV|IN27201800023356|||||
    27AAAC8C1ZZ|032018|||REVERSED|IN27201800022431|||||
    27AAAC8C1ZZ|042018|||INV|IN27201800023400|||||
    27AAAC8C1ZZ|042018|||INV|IN27201800023182|||||

输出应该是
a|b|c|d|Min|Max|result|j|result
27AAAC8C1ZZ|042018|||N27201800023182|IN27201800024289|1108||1108

代码IM试图找到最大值和最小值,但得到错误的输出。
 awk 'BEGIN{OFS=FS="|"} {if ($5=="INV"){ getline; min=$6;max=$6}}
          {(min>$6)?min=$7:"";(max>$6)?"":max=$8}
     END{print min, max}' input.txt

输出错误
IN27201800023182|

最佳答案

这个脚本:

awk 'BEGIN{
  OFS=FS="|";
  getline;
  saved=$1"|"$2; # saved for output
  min=substr($6,3); # initial min and max values
  max=substr($6,3);
}
{
  if ($5 == "INV") { # if column $5 is INC
    if (min > substr($6,3)) { min=substr($6,3); };
    if (max < substr($6,3)) { max=substr($6,3); };
  }
}
END{
  result=max-min+1;
  print saved,"","","IN"min,"IN"max,result,result;
}' \
input.txt

输出:
27AAAC8C1ZZ|042018|||N27201800023182|IN27201800024289|1108|1108

关于linux - AWK从列中找到最大值和最小值并存储在其他列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50210247/

10-14 03:50