답변:
wc (GNU coreutils) 사용 7.4 :
wc -L filename
제공합니다 :
101 filename
-L
는 로캘 에 따라 다릅니다. 일부 문자 (바이트 및 멀티 바이트 의미)는 전혀 계산되지 않을 수 있습니다!
wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
은 coreutils
모든 GNU coreutils를 g
접두사로 설치 하는 공식 입니다.
awk '{print length, $0}' Input_file |sort -nr|head -1
참조 : 파일에서 가장 긴 줄 찾기
END{}
블록 에서 인쇄 해보십시오 .
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
고양이를 쓸모없고 외부 명령을 사용하지 않고 재미 있고 교육적인 목적으로 순수한 POSIX 셸 솔루션 . 파일 이름을 첫 번째 인수로 사용합니다.
#!/bin/sh
MAX=0 IFS=
while read -r line; do
if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
< "$1"
했으며 stdin에서 쉽게 읽을 수 있습니다. 테스트를 통해 $#
인수 수에 따라 두 가지를 모두 수행 할 수도 있습니다. 이 세상에는 쓸모없는 고양이가 필요하지 않습니다. 초보자는 처음부터 올바르게 가르쳐야합니다.
longest < /usr/share/dict/words
perl -ne 'print length()." line $. $_"' myfile | sort -nr | head -n 1
가장 긴 줄의 길이, 줄 번호 및 내용을 인쇄합니다
perl -ne 'print length()." line $. $_"' myfile | sort -n
줄 번호와 길이를 가진 모든 줄의 정렬 된 목록을 인쇄합니다
.
연결 연산자이다 - 길이는 () 이후 여기에 사용하면
$.
, 현재의 행 번호는
$_
현재 라인
wc -L
지금까지 내가 본 최고의 솔루션입니다.
wc -L
삼초했다
wc -L
숫자 레코드를 세십시오-이 Q는 가장 긴 줄 을 찾으려고했습니다 . 정확하지는 않으므로 정확한 비교는 아닙니다.
위의 예에서 중요한 간과 점.
다음 2 개의 예제는 확장 탭을 계산합니다.
wc -L <"${SourceFile}"
# or
expand --tabs=8 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'
다음 두 개의 확장되지 않은 탭이 계산됩니다.
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
awk '{print length}' test.txt | sort -rn | head -1
. 실제 라인의 내용도 필요하다면 awk '{print length,$0}' test.txt | sort -k1 -rn| head -1
재미있게 여기 Powershell 버전이 있습니다.
cat filename.txt | sort length | select -last 1
그리고 길이를 얻으려면 :
(cat filename.txt | sort length | select -last 1).Length
sort
filename.txt를 인수로 사용할 수 있습니까 ? 그러면 sort length filename.txt | select -last 1
파이프와 데이터를 복사하는 프로세스를 피하기 때문에 고양이는 쓸모가 없습니다 .
나는 유닉스 환경에 있으며 크기가 몇 GB 인 gzipped 파일로 작업합니다. 레코드 길이가 2052 인 2GB gzipped 파일을 사용하여 다음 명령을 테스트했습니다.
zcat <gzipped file> | wc -L
과
zcat <gzipped file> | awk '{print length}' | sort -u
시간은 평균적이었다
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"
awk
. wc
버전이 먼저 실행중인 버전 의 디스크 블록 캐싱 (및 디스크 캐시 시드)의 이점 이 있다고 걱정할 것 입니다. 이 논점을 고수하기 위해 10 번의 런을 통해 누가 먼저 부름을 받는지에 대한 순서를 무작위로 만들어야 할 것입니다.
MacOS를 사용 wc: illegal option -- L
중이고이 오류가 발생하는 경우
GNU sipmly를 설치할 필요가 없습니다.
파일의 가장 긴 줄에있는 문자의 수를 구하고 OS X run을 사용하는 경우 :
awk '{print length}' "$file_name" | sort -rn | head -1
이 같은;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
출력 :
The longest line in the file my_file has 117 characters
-c -l -m -w
옵션은 POSIX입니다.-L
GNUism입니다.