Add up a column of numbers at the Unix shell

后端 未结 20 2249
Happy的楠姐
Happy的楠姐 2021-01-29 18:10

Given a list of files in files.txt, I can get a list of their sizes like this:

cat files.txt | xargs ls -l | cut -c 23-30

which pr

相关标签:
20条回答
  • 2021-01-29 18:46

    if you don't have bc installed, try

    echo $(( $(... | paste -sd+ -) ))
    

    instead of

    ... | paste -sd+ - | bc
    

    $( ) <-- return the value of executing the command

    $(( 1+2 )) <-- return the evaluated results

    echo <-- echo it to the screen

    0 讨论(0)
  • 2021-01-29 18:46
    #
    #       @(#) addup.sh 1.0 90/07/19
    #
    #       Copyright (C) <heh> SjB, 1990
    #       Adds up a column (default=last) of numbers in a file.
    #       95/05/16 updated to allow (999) negative style numbers.
    
    
    case $1 in
    
    -[0-9])
    
            COLUMN=`echo $1 | tr -d -`
    
            shift
    
    ;;
    
    *)
    
            COLUMN="NF"
    
    ;;
    
    esac
    
    echo "Adding up column .. $COLUMN .. of file(s) .. $*"
    
    nawk  ' OFMT="%.2f"                                       # 1 "%12.2f"
    
            { x = '$COLUMN'                                   # 2
    
              neg = index($x, "$")                            # 3
    
              if (neg > 0) X = gsub("\\$", "", $x)
    
              neg = index($x, ",")                            # 4
    
              if (neg > 1) X = gsub(",", "", $x)
    
              neg = index($x, "(")                            # 8 neg (123 & change
    
              if (neg > 0) X = gsub("\\(", "", $x)
    
              if (neg > 0) $x = (-1 * $x)                     # it to "-123.00"
    
              neg = index($x, "-")                            # 5
    
              if (neg > 1) $x = (-1 * $x)                     # 6
    
              t += $x                                         # 7
    
              print "x is <<<", $x+0, ">>> running balance:", t
    
            } ' $*
    
    
    # 1.  set numeric format to eliminate rounding errors
    # 1.1 had to reset numeric format from 12.2f to .2f 95/05/16
    #     when a computed number is assigned to a variable ( $x = (-1 * $x) )
    #     it causes $x to use the OFMT so -1.23 = "________-1.23" vs "-1.23"
    #     and that causes my #5 (negative check) to not work correctly because
    #     the index returns a number >1 and to the neg neg than becomes a positive
    #     this only occurs if the number happened to b a "(" neg number
    # 2.  find the field we want to add up (comes from the shell or defaults
    #     to the last field "NF") in the file
    # 3.  check for a dollar sign ($) in the number - if there get rid of it
    #     so we may add it correctly - $12 $1$2 $1$2$ $$1$$2$$ all = 12
    # 4.  check for a comma (,) in the number - if there get rid of it so we
    #     may add it correctly - 1,2 12, 1,,2 1,,2,, all = 12   (,12=0)
    # 5.  check for negative numbers
    # 6.  if x is a negative number in the form 999- "make" it a recognized
    #     number like -999 - if x is a negative number like -999 already
    #     the test fails (y is not >1) and this "true" negative is not made
    #     positive
    # 7.  accumulate the total
    # 8.  if x is a negative number in the form (999) "make it a recognized
    #     number like -999
    # * Note that a (-9) (neg neg number) returns a postive
    # * Mite not work rite with all forms of all numbers using $-,+. etc. *
    
    0 讨论(0)
提交回复
热议问题