How to find the shortest number in a file [closed]
I'm trying to find the shortest number in the file but I do not know how to do it
This is my input file:
asd
qwmcqm
342
xsa
53425423432
54334
aseqwe
// so i want to print "342"
It has to be AWK script so i can't use "sort" (in shell), i've tried this:
while(( getline line < "FileInput" ) > 0 ){
if ( line ~ /[0-9]/ )
if (length(line) < L)
L = length(line)
}
but it doesn't work! It works only for largest number if i change "<" to ">" inside script.
awk
closed as unclear what you're asking by G-Man, Archemar, Christopher, Mr Shunz, X Tian Jan 25 at 10:24
Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |
I'm trying to find the shortest number in the file but I do not know how to do it
This is my input file:
asd
qwmcqm
342
xsa
53425423432
54334
aseqwe
// so i want to print "342"
It has to be AWK script so i can't use "sort" (in shell), i've tried this:
while(( getline line < "FileInput" ) > 0 ){
if ( line ~ /[0-9]/ )
if (length(line) < L)
L = length(line)
}
but it doesn't work! It works only for largest number if i change "<" to ">" inside script.
awk
closed as unclear what you're asking by G-Man, Archemar, Christopher, Mr Shunz, X Tian Jan 25 at 10:24
Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
1
Why do you need to usesort
in the shell? Is that part of the assignment?awk
has built-in sorting functions (asort
andasorti
).
– jordanm
Jan 23 at 23:46
3
You should define your terms. Is1.00
a number? Which is “shorter”,1.00
or42
? Is0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.
– G-Man
Jan 23 at 23:47
1
Also, do you just want to print342
? If so, a simplegrep
tosort
tohead
will do.
– Nasir Riley
Jan 23 at 23:51
2
FYI usinggetline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow
– steeldriver
Jan 23 at 23:52
add a comment |
I'm trying to find the shortest number in the file but I do not know how to do it
This is my input file:
asd
qwmcqm
342
xsa
53425423432
54334
aseqwe
// so i want to print "342"
It has to be AWK script so i can't use "sort" (in shell), i've tried this:
while(( getline line < "FileInput" ) > 0 ){
if ( line ~ /[0-9]/ )
if (length(line) < L)
L = length(line)
}
but it doesn't work! It works only for largest number if i change "<" to ">" inside script.
awk
I'm trying to find the shortest number in the file but I do not know how to do it
This is my input file:
asd
qwmcqm
342
xsa
53425423432
54334
aseqwe
// so i want to print "342"
It has to be AWK script so i can't use "sort" (in shell), i've tried this:
while(( getline line < "FileInput" ) > 0 ){
if ( line ~ /[0-9]/ )
if (length(line) < L)
L = length(line)
}
but it doesn't work! It works only for largest number if i change "<" to ">" inside script.
awk
awk
edited Jan 23 at 23:36
jordanm
30.5k28694
30.5k28694
asked Jan 23 at 23:10
MikeMike
61
61
closed as unclear what you're asking by G-Man, Archemar, Christopher, Mr Shunz, X Tian Jan 25 at 10:24
Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
closed as unclear what you're asking by G-Man, Archemar, Christopher, Mr Shunz, X Tian Jan 25 at 10:24
Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
1
Why do you need to usesort
in the shell? Is that part of the assignment?awk
has built-in sorting functions (asort
andasorti
).
– jordanm
Jan 23 at 23:46
3
You should define your terms. Is1.00
a number? Which is “shorter”,1.00
or42
? Is0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.
– G-Man
Jan 23 at 23:47
1
Also, do you just want to print342
? If so, a simplegrep
tosort
tohead
will do.
– Nasir Riley
Jan 23 at 23:51
2
FYI usinggetline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow
– steeldriver
Jan 23 at 23:52
add a comment |
1
Why do you need to usesort
in the shell? Is that part of the assignment?awk
has built-in sorting functions (asort
andasorti
).
– jordanm
Jan 23 at 23:46
3
You should define your terms. Is1.00
a number? Which is “shorter”,1.00
or42
? Is0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.
– G-Man
Jan 23 at 23:47
1
Also, do you just want to print342
? If so, a simplegrep
tosort
tohead
will do.
– Nasir Riley
Jan 23 at 23:51
2
FYI usinggetline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow
– steeldriver
Jan 23 at 23:52
1
1
Why do you need to use
sort
in the shell? Is that part of the assignment? awk
has built-in sorting functions (asort
and asorti
).– jordanm
Jan 23 at 23:46
Why do you need to use
sort
in the shell? Is that part of the assignment? awk
has built-in sorting functions (asort
and asorti
).– jordanm
Jan 23 at 23:46
3
3
You should define your terms. Is
1.00
a number? Which is “shorter”, 1.00
or 42
? Is 0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.– G-Man
Jan 23 at 23:47
You should define your terms. Is
1.00
a number? Which is “shorter”, 1.00
or 42
? Is 0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.– G-Man
Jan 23 at 23:47
1
1
Also, do you just want to print
342
? If so, a simple grep
to sort
to head
will do.– Nasir Riley
Jan 23 at 23:51
Also, do you just want to print
342
? If so, a simple grep
to sort
to head
will do.– Nasir Riley
Jan 23 at 23:51
2
2
FYI using
getline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow– steeldriver
Jan 23 at 23:52
FYI using
getline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow– steeldriver
Jan 23 at 23:52
add a comment |
1 Answer
1
active
oldest
votes
The reason that your example works for finding the largest number and not the smallest number is because variables in awk
which have not been explicitly set, default to 0. None of your matching lines will be less than 0.
Since you are wanting to compare with previously found numbers, you can ensure that the length of the first number found is set to L by including a check if L is 0 in your conditional (which will only be the case if it is the first number seen in the file).
if (length(line) < L || L == 0) {
L = length(line)
}
1
Or to get the actual number as stated, using the default loop:awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can addBEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)
– dave_thompson_085
Jan 24 at 7:30
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The reason that your example works for finding the largest number and not the smallest number is because variables in awk
which have not been explicitly set, default to 0. None of your matching lines will be less than 0.
Since you are wanting to compare with previously found numbers, you can ensure that the length of the first number found is set to L by including a check if L is 0 in your conditional (which will only be the case if it is the first number seen in the file).
if (length(line) < L || L == 0) {
L = length(line)
}
1
Or to get the actual number as stated, using the default loop:awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can addBEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)
– dave_thompson_085
Jan 24 at 7:30
add a comment |
The reason that your example works for finding the largest number and not the smallest number is because variables in awk
which have not been explicitly set, default to 0. None of your matching lines will be less than 0.
Since you are wanting to compare with previously found numbers, you can ensure that the length of the first number found is set to L by including a check if L is 0 in your conditional (which will only be the case if it is the first number seen in the file).
if (length(line) < L || L == 0) {
L = length(line)
}
1
Or to get the actual number as stated, using the default loop:awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can addBEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)
– dave_thompson_085
Jan 24 at 7:30
add a comment |
The reason that your example works for finding the largest number and not the smallest number is because variables in awk
which have not been explicitly set, default to 0. None of your matching lines will be less than 0.
Since you are wanting to compare with previously found numbers, you can ensure that the length of the first number found is set to L by including a check if L is 0 in your conditional (which will only be the case if it is the first number seen in the file).
if (length(line) < L || L == 0) {
L = length(line)
}
The reason that your example works for finding the largest number and not the smallest number is because variables in awk
which have not been explicitly set, default to 0. None of your matching lines will be less than 0.
Since you are wanting to compare with previously found numbers, you can ensure that the length of the first number found is set to L by including a check if L is 0 in your conditional (which will only be the case if it is the first number seen in the file).
if (length(line) < L || L == 0) {
L = length(line)
}
answered Jan 23 at 23:44
jordanmjordanm
30.5k28694
30.5k28694
1
Or to get the actual number as stated, using the default loop:awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can addBEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)
– dave_thompson_085
Jan 24 at 7:30
add a comment |
1
Or to get the actual number as stated, using the default loop:awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can addBEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)
– dave_thompson_085
Jan 24 at 7:30
1
1
Or to get the actual number as stated, using the default loop:
awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can add BEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)– dave_thompson_085
Jan 24 at 7:30
Or to get the actual number as stated, using the default loop:
awk '/^[0-9]+$/ && (length<length(X) || !length(X)) {X=$0} END{print X}'
(Can add BEGIN{X=""}
if desired but not needed; vars actually default to empty string which converts to zero.)– dave_thompson_085
Jan 24 at 7:30
add a comment |
1
Why do you need to use
sort
in the shell? Is that part of the assignment?awk
has built-in sorting functions (asort
andasorti
).– jordanm
Jan 23 at 23:46
3
You should define your terms. Is
1.00
a number? Which is “shorter”,1.00
or42
? Is0xC
a number? Etc. Please do not respond in comments; edit your question to make it clearer and more complete.– G-Man
Jan 23 at 23:47
1
Also, do you just want to print
342
? If so, a simplegrep
tosort
tohead
will do.– Nasir Riley
Jan 23 at 23:51
2
FYI using
getline
in this way is non-idiomatic - and unnecessary since awk reads and processes line-by-line (or, more formally, record-by-record) anyhow– steeldriver
Jan 23 at 23:52