문제

파일에서 가장 긴 줄의 길이를 찾는 간단한 방법을 찾고 있습니다. 이상적으로는 스크립트 대신 간단한 배쉬 쉘 명령입니다.

도움이 되었습니까?

해결책

WC (GNU Coreutils) 사용 7.4 :

wc -L filename

제공 :

101 filename

다른 팁

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

참조 : 파일에서 가장 긴 줄을 찾습니다

awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }'  YOURFILE 

재미 있고 교육적인 목적을 위해 순수한 posix 쉘 솔루션, 고양이를 쓸모없는 사용없이 외부 명령에 대한 포크가 없습니다. Filename을 첫 번째 인수로 가져옵니다.

#!/bin/sh

MAX=0 IFS=
while read -r line; do
  if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
wc -L < filename

주어진

101
perl -ne 'print length()."  line $.  $_"' myfile | sort -nr | head -n 1

가장 긴 줄의 길이, 줄 번호 및 내용을 인쇄

perl -ne 'print length()."  line $.  $_"' myfile | sort -n

줄 번호와 길이가있는 모든 줄의 정렬 된 목록을 인쇄

. 연결 연산자입니다. 길이 () 이후에 여기에 사용됩니다.
$. 현재 줄 번호입니다
$_ 현재 라인입니다

위의 예에서 중요한 간과 된 점.

다음 2 가지 예는 확장 된 탭을 계산합니다

  wc -L  <"${SourceFile}" 
# or
  expand --tabs=1 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'

다음 2 개는 확장되지 않은 탭을 계산합니다.

  expand --tabs=1 "${SourceFile}" | wc -L 
# or
  awk '{ if (length($0) > max) {max = length($0)} } END { print max }' "${SourceFile}"

그래서

              Expanded    nonexpanded
$'nn\tnn'       10            5

모든 대답은 가장 긴 줄의 줄 번호를 제공하지 않습니다. 다음 명령은 줄 번호와 대략 길이를 줄 수 있습니다.

$ cat -n test.txt | awk '{print "longest_line_number: " $1 " length_with_line_number: " length}' | sort -k4 -nr | head -3
longest_line_number: 3 length_with_line_number: 13
longest_line_number: 4 length_with_line_number: 12
longest_line_number: 2 length_with_line_number: 11

Perl에서 :

perl -ne 'print ($l = $_) if (length > length($l));' filename | tail -1

이것은 단지 길이가 아니라 선을 인쇄합니다.

다음은 Anwser의 참조입니다

cat filename | awk '{print length, $0}'|sort -nr|head -1

http://wtanaka.com/node/7719

재미를 위해 PowerShell 버전은 다음과 같습니다.

cat filename.txt | sort length | select -last 1

그리고 길이를 얻으려면 :

(cat filename.txt | sort length | select -last 1).Length

저는 Unix 환경에 있으며 크기가 몇 개의 GBs 인 Gzipped 파일로 작업합니다. 레코드 길이가 2052 인 2GB Gzipped 파일을 사용하여 다음 명령을 테스트했습니다.

  1. zcat <gzipped file> | wc -L

그리고

  1. zcat <gzipped file> | awk '{print length}' | sort -u

시대는 avarage에있었습니다

  1. 117 초

  2. 109 초

여기에 약 10 번의 실행 후 내 스크립트가 있습니다.

START=$(date +%s) ## time of start

zcat $1 |  wc -L

END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

START=$(date +%s) ## time of start

zcat $1 |  awk '{print length}' | sort -u

END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

테마의 변형.

이것은 보여줄 것입니다 모두 파일에서 가장 긴 줄의 길이를 갖는 줄은 소스에 나타나는 순서를 유지합니다.

FILE=myfile grep `tr -c "\n" "." < $FILE | sort | tail -1` $FILE

그래서 myfile

x
mn
xyz
123
abc

줄게

xyz
123
abc
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top