Bash script find longest line/lines in several files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash script find longest line/lines in several files
# 1  
Old 10-25-2010
Bash script find longest line/lines in several files

Hello everyone...
I need to find out, how to find longest line or possibly lines in several files which are arguments for script. The thing is, that I tried some possibilities before, but nothing worked correctly.
Example
when i use:

Code:
awk ' { if ( length > L ) { L=length ;s=$0 } }END{ print L,"\""s"\"" }' "file"

it will only print 1 longest line. But what if there are 2 or more lines with exact length? Or there are similar lines in different files?

Code:
 awk '{print length, $0}' | sort -nr | head -1

this is my second through, but same problem as above and i don't know how to make it.

Thanks for any solutions

Last edited by Neo; 10-25-2010 at 06:10 AM.. Reason: code taggies, typos
# 2  
Old 10-25-2010
Try this:
Code:
awk 'length==L{S[++i]=$0} length > L{L=length; delete S; S[i=1]=$0}END{ for(j=1;j<=i;j++)print L,"\""S[j]"\"" }' infile



---------- Post updated at 11:29 ---------- Previous update was at 11:25 ----------




or
Code:
awk 'length==L{p=p RS L FS "\""$0"\""} length > L{L=length; p=L FS "\""$0"\""}END{ print p}' infile

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 10-25-2010
Code:
awk 'NR==FNR{L=(length>L)?length:L;next} length==L' infile infile

This User Gave Thanks to rdcwayx For This Post:
# 4  
Old 10-25-2010
OK, thank you for you time, it works nice Smilie



---------- Post updated at 06:38 PM ---------- Previous update was at 11:17 AM ----------




May i ask, is it possible to do same thing without awk?
# 5  
Old 10-25-2010
Shell version
shell code:
  1. maxlength=0
  2. while IFS= read -r line
  3. do
  4.   if [ ${#line} -eq $maxlength ]; then
  5.     p="${p}
  6. ${#line} \"$line\""
  7.   elif [ ${#line} -gt $maxlength ]; then
  8.     p="${#line} \"$line\""
  9.     maxlength=${#line}
  10.   fi
  11. done < infile
  12. echo "$p"
This User Gave Thanks to Scrutinizer For This Post:
# 6  
Old 10-26-2010
Thank for that, i really appreciate that. But now something more difficult. I have written a bash script which should find the longest line or lines from all of the files which are arguments for script. If there are no argument, standart input is selected... And script should have help. So my question is, why this my script isn't working at all?
Code:
#! /usr/local/bin/bash2

print_help ()
{
    echo "The longest file or files"
    echo "-h shows help"
}
riadok=""

for i in  "$@"; do
        case "$1" in
        -h)  print_help
              exit 0
              break
              ;;
        *)   break
              ;;
        esac
        if ["$0" -gt 0]
        then
                riadok="$(awk 'length==L{p=p RS L FS "\""$0"\""} length > L{L=length; p=L FS "\""$0"\""}END{ print p}' $0)"
                pole=("${pole[@]}" "$riadok")
        fi
        shift
done

for i in "${pole[@]}"; do
        echo "$i"
done

exit 0

# 7  
Old 10-26-2010
Presuming /usr/local/bin/bash2 exists on your system, this will not work:
Code:
if ["$0" -gt 0]

there should be spaces and quotes have no business in a numerical context
Code:
if [ $0 -gt 0 ]

But seeing if $0 is greater than -0 makes no sense. Perhaps you mean
Code:
if [ $# -gt 0 ]

also: case $1 should be case $i and so you really want to break out of the for loop with a break statement, you mix an array pole with a variable assignment, etc.
I think you need to have a thorough look at your script...

Last edited by Scrutinizer; 10-26-2010 at 06:22 AM..
This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script using awk to find and replace a line, how to ignore comment lines

Hello, I have some code that works more or less. This is called by a make file to adjust some hard-coded definitions in the src code. The script generated some values by looking at some of the src files and then writes those values to specific locations in other files. The awk code is used to... (3 Replies)
Discussion started by: LMHmedchem
3 Replies

2. Shell Programming and Scripting

Bash: copying lines with specific character to files with same name as copied line.

I am trying to make my script as simple as a possible but, I am not sure if the way I am approaching is necessarily the most efficient or effective it can be. What I am mainly trying to fix is a for loop to remove a string from the specified files and within this loop I am trying to copy the lines... (2 Replies)
Discussion started by: Allie_gastrator
2 Replies

3. UNIX for Advanced & Expert Users

How to find a string in a line in UNIX file and delete that line and previous 3 lines ?

Hi , i have a file with data as below.This is same file. But actual file contains to many rows. i want to search for a string "Field 039 00" and delete that line and previous 3 lines in that file.. Can some body suggested me how can i do using either sed or awk command ? Field 004... (7 Replies)
Discussion started by: vadlamudy
7 Replies

4. Shell Programming and Scripting

Shell Script to find common lines and replace next line

I want to find common line in two files and replace the next line of first file with the next line of second file. (sed,awk,perl,bash any solution is welcomed ) Case Ignored. Multiple Occurrence of same line. File 1: hgacdavd sndm,ACNMSDC msgid "Rome" msgstr "" kgcksdcgfkdsb... (4 Replies)
Discussion started by: madira
4 Replies

5. Shell Programming and Scripting

wc -L giving incorrect length of longest line

Running below line gives 3957 as length of longest line in file 20121119_SRMNotes_init.dat awk ' { if ( length > 3950 ) { x = length } }END{ print x }' 20121119_SRMNotes_init.dat While wc -L 20121119_SRMNotes_init.dat gives output as 4329. Why is there a difference between these two commands.... (2 Replies)
Discussion started by: Satish Mantha
2 Replies

6. Shell Programming and Scripting

Bash script to find the number of files and identify which ones are 0 bytes.

I am writing a bash script to find out all the files in a directory which are empty. I am running into multiple issues. I will really appreciate if someone can please help me. #!/bin/bash DATE=$(date +%m%d%y) TIME=$(date +%H%M) DIR="/home/statsetl/input/civil/test" ... (1 Reply)
Discussion started by: monasharma13
1 Replies

7. Shell Programming and Scripting

Find longest string and print it

Hello all, I need to find the longest string in a select field and print that field. I have tried a few different methods and I always end up one step from where I need to be. Methods thus far: nawk '{if (length($1) > long) long=length($1); if(length($1)==long) print $1}' The above... (6 Replies)
Discussion started by: SEinT
6 Replies

8. Shell Programming and Scripting

Finding longest line in a Record

Good Morning/Afternoon All, I am using the nawk utility in korn shell to find the longest field and display that result. My Data is as follows: The cat ran The elephant ran Milly ran too We all ran I have tried nawk '{ if (length($1) > len) len=length($1); print $1}' filename The... (5 Replies)
Discussion started by: SEinT
5 Replies

9. Shell Programming and Scripting

Shell script to find longest phrase

Hi Everyone, I am trying to write a shell script that can find the longest phrase that appears at least twice in an online news article. The HTML has been parsed through an HTML parser, converted to XML and the article content extracted. I have put this article content in a text file to work... (24 Replies)
Discussion started by: stargazerr
24 Replies

10. Shell Programming and Scripting

Find the length of the longest line

Dear All, To find the length of the longest line from a file i have used wc -L which is giving the proper output... But the problem is AIX os does not support wc -L command. so is there any other way 2 to find out the length of the longest line using awk or sed ? Regards, Pankaj (1 Reply)
Discussion started by: panknil
1 Replies
Login or Register to Ask a Question