Nice programing

bash echo 파일 이름없이 bash 변수에 주어진 파일 줄 수

nicepro 2020. 10. 11. 11:18
반응형

bash echo 파일 이름없이 bash 변수에 주어진 파일 줄 수


bash 스크립트에 다음 세 가지 구성이 있습니다.

NUMOFLINES=$(wc -l $JAVA_TAGS_FILE)
echo $NUMOFLINES" lines"

echo $(wc -l $JAVA_TAGS_FILE)" lines"

echo "$(wc -l $JAVA_TAGS_FILE) lines"

그리고 스크립트가 실행될 때 둘 다 동일한 출력을 생성합니다.

121711 /home/slash/.java_base.tag lines
121711 /home/slash/.java_base.tag lines
121711 /home/slash/.java_base.tag lines

즉, 파일 이름도 에코됩니다 (원하지 않습니다). 이 스크립 렛이 실패하는 이유는 무엇이며 어떻게 출력해야합니까?

121711 lines

?


자체 데이터를 사용한 예

wc에 인수로 파일 이름을 전달하는 대신 JAVA_TAGS_FILE의 리디렉션을 사용하여 NUMOFLINES 변수에 파일 이름이 포함되지 않도록 할 수 있습니다 . 예를 들면 :

NUMOFLINES=$(wc -l < "$JAVA_TAGS_FILE")

설명 : 파이프 또는 리디렉션을 사용하여 출력에서 ​​파일 이름 방지

WC 입력 파이프 또는 리디렉션 연산자에서 촬영하는 경우 유틸리티는 출력 파일의 이름을 출력하지 않을 것이다. 다음과 같은 다양한 예를 고려하십시오.

# wc shows filename when the file is an argument
$ wc -l /etc/passwd
41 /etc/passwd

# filename is ignored when piped in on standard input
$ cat /etc/passwd | wc -l
41

# unusual redirection, but wc still ignores the filename
$ < /etc/passwd wc -l
41

# typical redirection, taking standard input from a file
$ wc -l < /etc/passwd
41

보시다시피 wc 가 파일 이름을 인쇄 하는 유일한 시간 은 표준 입력의 데이터가 아닌 인수로 전달 될 때입니다. 어떤 경우에는 파일 이름이 인쇄되기를 원할 수 있으므로 언제 표시되는지 이해하는 것이 유용합니다.


wc 파일 이름을주지 않으면 파일 이름을 가져올 수 없습니다.

wc -l < "$JAVA_TAGS_FILE"

awk를 사용할 수도 있습니다.

awk 'END {print NR,"lines"}' filename

또는

awk 'END {print NR}' filename


(Mac 및 기타 Unix에 적용)

실제로 wc 접근 방식에 문제가 있습니다. 줄 끝 기호로 끝나지 않으면 마지막 줄을 계산하지 않습니다.

대신 사용

nbLines=$(cat -n file.txt | tail -n 1 | cut -f1 | xargs)

또는 더 좋습니다 (gniourf_gniourf에게 감사드립니다) :

nblines=$(grep -c '' file.txt)

참고 : chilicuil의 awk 접근 방식도 작동합니다.


매우 간단합니다.

NUMOFLINES=$(cat $JAVA_TAGS_FILE | wc -l )

또는

NUMOFLINES=$(wc -l $JAVA_TAGS_FILE | awk '{print $1}')

I normally use the 'back tick' feature of bash

export NUM_LINES=`wc -l filename`

Note the 'tick' is the 'back tick' e.g. ` not the normal single quote

참고URL : https://stackoverflow.com/questions/12022319/bash-echo-number-of-lines-of-file-given-in-a-bash-variable-without-the-file-name

반응형