Sponsored Content
Top Forums Shell Programming and Scripting A better way to compare text length percentage? Post 303046101 by bedtime on Thursday 23rd of April 2020 07:52:48 PM
Old 04-23-2020
Thank you all for you solutions. I ended up going with vegersh99's solution as it was the most brief. I liked RudiC's mathmatics with the inverse equation.


Since I cannot have 'division by zero' errors, I added the 'if' statement near the end. Found out that shell doesn't like to compare numbers with decimals so added the int() function as well:

Code:
echo ${#text1} ${#text2} | awk '{a=b=$1;($1>$2)?a=$2:b=$2;if(a*b){print int(100/a*b)}}'


Would really like to figure out how to get this to do the equation so as not to have the 'division by zero' error when one or two variables have an empty string. I've tried a bunch of things such as adding '1' to each variable and trying to make it up elsewhere, but each time the values are incorrect.



Anyways, for now, it's more concise, and it's being used in the code.


Thanks everyone!
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

how can i compare te length of the string

how can i campare te length of the string $var = unix if ( $var -eq 4 ) then.. is it right (6 Replies)
Discussion started by: mail2sant
6 Replies

2. Shell Programming and Scripting

How to Compare two files depend on line length Chars

I need to compare two files with exactly same length as example: - File1 contain 500 records with length of 640 chars of each line. File2 contain 1500 records with length of 640 chars of each line. I need get an output to be written in File3 which will contain 1000 records difference. but... (4 Replies)
Discussion started by: elj3dah
4 Replies

3. Shell Programming and Scripting

Need awk script to compare 2 fields in fixed length file.

Need a script that manipulates a fixed length file that will compare 2 fields in that file and if they are equal write that line to a new file. i.e. If fields 87-93 = fields 119-125, then write the entire line to a new file. Do this for every line in the file. After we get only the fields... (1 Reply)
Discussion started by: Muga801
1 Replies

4. UNIX for Dummies Questions & Answers

compare 2 very large lists of different length

I have two very large datasets (>100MB) in a simple vertical list format. They are of different size and with different order and formatting (e.g. whitespace and some other minor cruft that would thwart easy regex). Let's call them set1 and set2. I want to check set2 to see if it contains... (2 Replies)
Discussion started by: uiop44
2 Replies

5. Shell Programming and Scripting

changing a variable length text to a fixed length

Hi, Can anyone help with a effective solution ? I need to change a variable length text field (between 1 - 18 characters) to a fixed length text of 18 characters with the unused portion, at the end, filled with spaces. The text field is actually field 10 of a .csv file however I could cut... (7 Replies)
Discussion started by: dc18
7 Replies

6. Shell Programming and Scripting

Aligning text files by max field length

Hello, Is there anyway that I can align a pipe delimited text file by the maxium field length where the field is separated out by pipes for large text files with more than 100,000 rows? So, far I have searched other forums and google about aligning text files in unix and I have noticed that... (7 Replies)
Discussion started by: physalis2099
7 Replies

7. UNIX for Dummies Questions & Answers

print variable length text from the middle of a line?

I am trying to get text from a webpage, in terminal form. So far I am: 1. getting the html for the page printed using curl (curl -s webpage.com), which is then 2. piped to awk, printing line number 29 (awk NR==29), then 3. this is where I am sort of lost. I know where in the printed line I... (7 Replies)
Discussion started by: darkfalz
7 Replies

8. Shell Programming and Scripting

awk to output the percentage of a field compared to length

The awk below using the sample input would output the following: Basically, it averages the text in $5 that matches if $7 < 30 . awk '{if(len==0){last=$5;total=$7;len=1;getline}if($5!=last){printf("%s\t%f\n", last,... (6 Replies)
Discussion started by: cmccabe
6 Replies

9. Shell Programming and Scripting

Compare string length to a number

Hi, I want to compare strings length to a number but i am getting error. I want first name should be length of 8. Please help. #bin !/bin/bash clear echo -n "Enter name " read name IFS=_ ary=($name) for key in "${!ary}"; do echo "$key${ary}"; done ##First name should be equal to 8... (8 Replies)
Discussion started by: rajneesh4U
8 Replies

10. Shell Programming and Scripting

Extracting fixed length number from a text file

Hi, I have a text file with sample records as CASE ID: 20170218881083 Original presentment record for ARN not found for Re-presentment I want to extract the 23 digit number from this file. I thought of using grep but initially couldn't extract the required number. However, after... (16 Replies)
Discussion started by: dsid
16 Replies
Decimal(3tcl)                                             Tcl Decimal Arithmetic Library                                             Decimal(3tcl)

__________________________________________________________________________________________________________________________________________________

NAME
::Decimal - General decimal arithmetic SYNOPSIS
package require Tcl ?8.5? ::Decimal::fromstr string ::Decimal::tostr decimal ::Decimal::setVariable variable setting ::Decimal::add a b ::Decimal::+ a b ::Decimal::subtract a b ::Decimal::- a b ::Decimal::multiply a b ::Decimal::* a b ::Decimal::divide a b ::Decimal::/ a b ::Decimal::divideint a b ::Decimal::remainder a b ::Decimal::abs decimal ::Decimal::compare a b ::Decimal::max a b ::Decimal::maxmag a b ::Decimal::min a b ::Decimal::minmag a b ::Decimal::plus a ::Decimal::minus a ::Decimal::copynegate a ::Decimal::copysign a b ::Decimal::is-signed decimal ::Decimal::is-zero decimal ::Decimal::is-NaN decimal ::Decimal::is-infinite decimal ::Decimal::is-finite decimal ::Decimal::fma a b c ::Decimal::round_half_even decimal digits ::Decimal::round_half_up decimal digits ::Decimal::round_half_down decimal digits ::Decimal::round_down decimal digits ::Decimal::round_up decimal digits ::Decimal::round_floor decimal digits ::Decimal::round_ceiling decimal digits ::Decimal::round_05up decimal digits _________________________________________________________________ DESCRIPTION
The decimal package provides decimal arithmetic support for both limited precision floating point and arbitrary precision floating point. Additionally, integer arithmetic is supported. More information and the specifications on which this package depends can be found on the general decimal arithmetic page at http://speleotrove.com/decimal This package provides for: o A new data type decimal which is represented as a list containing sign, mantissa and exponent. o Arithmetic operations on those decimal numbers such as addition, subtraction, multiplication, etc... Numbers are converted to decimal format using the operation ::Decimal::fromstr. Numbers are converted back to string format using the operation ::Decimal::tostr. EXAMPLES
This section shows some simple examples. Since the purpose of this library is to perform decimal math operations, examples may be the sim- plest way to learn how to work with it and to see the difference between using this package and sticking with expr. Consult the API section of this man page for information about individual procedures. package require decimal # Various operations on two numbers. # We first convert them to decimal format. set a [::Decimal::fromstr 8.2] set b [::Decimal::fromstr .2] # Then we perform our operations. Here we multiply set c [::Decimal::* $a $b] # Finally we convert back to string format for presentation to the user. puts [::Decimal::tostr $c] ; # => will output 8.4 # Other examples # # Subtraction set c [::Decimal::- $a $b] puts [::Decimal::tostr $c] ; # => will output 8.0 # Why bother using this instead of simply expr? puts 8.399999999999999 ; # => will output 8.399999999999999 puts 7.999999999999999 ; # => will output 7.999999999999999 # See http://speleotrove.com/decimal to learn more about why this happens. API
::Decimal::fromstr string Convert string into a decimal. ::Decimal::tostr decimal Convert decimal into a string representing the number in base 10. ::Decimal::setVariable variable setting Sets the variable to setting. Valid variables are: o rounding - Method of rounding to use during rescale. Valid methods are round_half_even, round_half_up, round_half_down, round_down, round_up, round_floor, round_ceiling. o precision - Maximum number of digits allowed in mantissa. o extended - Set to 1 for extended mode. 0 for simplified mode. o maxExponent - Maximum value for the exponent. Defaults to 999. o minExponent - Minimum value for the exponent. Default to -998. ::Decimal::add a b ::Decimal::+ a b Return the sum of the two decimals a and b. ::Decimal::subtract a b ::Decimal::- a b Return the differnece of the two decimals a and b. ::Decimal::multiply a b ::Decimal::* a b Return the product of the two decimals a and b. ::Decimal::divide a b ::Decimal::/ a b Return the quotient of the division between the two decimals a and b. ::Decimal::divideint a b Return a the integer portion of the quotient of the division between decimals a and b ::Decimal::remainder a b Return the remainder of the division between the two decimals a and b. ::Decimal::abs decimal Return the absolute value of the decimal. ::Decimal::compare a b Compare the two decimals a and b, returning 0 if a == b, 1 if a > b, and -1 if a < b. ::Decimal::max a b Compare the two decimals a and b, and return a if a >= b, and b if a < b. ::Decimal::maxmag a b Compare the two decimals a and b while ignoring their signs, and return a if abs(a) >= abs(b), and b if abs(a) < abs(b). ::Decimal::min a b Compare the two decimals a and b, and return a if a <= b, and b if a > b. ::Decimal::minmag a b Compare the two decimals a and b while ignoring their signs, and return a if abs(a) <= abs(b), and b if abs(a) > abs(b). ::Decimal::plus a Return the result from ::Decimal::+ 0 $a. ::Decimal::minus a Return the result from ::Decimal::- 0 $a. ::Decimal::copynegate a Returns a with the sign flipped. ::Decimal::copysign a b Returns a with the sign set to the sign of the b. ::Decimal::is-signed decimal Return the sign of the decimal. The procedure returns 0 if the number is positive, 1 if it's negative. ::Decimal::is-zero decimal Return true if decimal value is zero, otherwise false is returned. ::Decimal::is-NaN decimal Return true if decimal value is NaN (not a number), otherwise false is returned. ::Decimal::is-infinite decimal Return true if decimal value is Infinite, otherwise false is returned. ::Decimal::is-finite decimal Return true if decimal value is finite, otherwise false is returned. ::Decimal::fma a b c Return the result from first multiplying a by b and then adding c. Rescaling only occurs after completion of all operations. In this way the result may vary from that returned by performing the operations individually. ::Decimal::round_half_even decimal digits Rounds decimal to digits number of decimal points with the following rules: Round to the nearest. If equidistant, round so the final digit is even. ::Decimal::round_half_up decimal digits Rounds decimal to digits number of decimal points with the following rules: Round to the nearest. If equidistant, round up. ::Decimal::round_half_down decimal digits Rounds decimal to digits number of decimal points with the following rules: Round to the nearest. If equidistant, round down. ::Decimal::round_down decimal digits Rounds decimal to digits number of decimal points with the following rules: Round toward 0. (Truncate) ::Decimal::round_up decimal digits Rounds decimal to digits number of decimal points with the following rules: Round away from 0 ::Decimal::round_floor decimal digits Rounds decimal to digits number of decimal points with the following rules: Round toward -Infinity. ::Decimal::round_ceiling decimal digits Rounds decimal to digits number of decimal points with the following rules: Round toward Infinity ::Decimal::round_05up decimal digits Rounds decimal to digits number of decimal points with the following rules: Round zero or five away from 0. The same as round-up, except that rounding up only occurs if the digit to be rounded up is 0 or 5, and after overflow the result is the same as for round- down. BUGS, IDEAS, FEEDBACK This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category Decimal of the Tcllib SF Trackers [http://sourceforge.net/tracker/?group_id=12883]. Please also report any ideas for enhancements you may have for either package and/or documentation. KEYWORDS
decimal, math, tcl CATEGORY
Mathematics COPYRIGHT
Copyright (c) 2011 Mark Alston <mark at beernut dot com> math 1.0.2 Decimal(3tcl)

Featured Tech Videos

All times are GMT -4. The time now is 05:13 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy