파일에서 가장 긴 줄의 길이를 얻으십시오
문제
파일에서 가장 긴 줄의 길이를 찾는 간단한 방법을 찾고 있습니다. 이상적으로는 스크립트 대신 간단한 배쉬 쉘 명령입니다.
해결책
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
재미를 위해 PowerShell 버전은 다음과 같습니다.
cat filename.txt | sort length | select -last 1
그리고 길이를 얻으려면 :
(cat filename.txt | sort length | select -last 1).Length
저는 Unix 환경에 있으며 크기가 몇 개의 GBs 인 Gzipped 파일로 작업합니다. 레코드 길이가 2052 인 2GB Gzipped 파일을 사용하여 다음 명령을 테스트했습니다.
zcat <gzipped file> | wc -L
그리고
zcat <gzipped file> | awk '{print length}' | sort -u
시대는 avarage에있었습니다
117 초
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