unix-파일의 열 수
이와 같은 데이터가있는 파일 (예 : stores.dat 파일)이 주어집니다.
sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200
열 이름 수를 출력하는 명령은 무엇입니까?
즉, 위의 예에서는 4입니다 (파이프 문자 수 + 첫 번째 줄에 1).
나는 다음과 같이 생각하고 있었다.
awk '{ FS = "|" } ; { print NF}' stores.dat
그러나 첫 번째 줄 대신 모든 줄을 반환하고 첫 번째 줄의 경우 4 대신 1을 반환합니다.
awk -F'|' '{print NF; exit}' stores.dat
첫 번째 줄 바로 다음에 종료하십시오.
이것은 해결 방법입니다 (저는 awk를 자주 사용하지 않습니다).
데이터가 포함 된 파일의 첫 번째 행을 표시하고 모든 파이프를 개행 문자로 바꾼 다음 행을 계산합니다.
$ head -1 stores.dat | tr '|' '\n' | wc -l
공백을 사용하지 않는 한 | wc -w
첫 번째 줄 에서 사용할 수 있어야합니다 .
wc
"단어 수"는 단순히 입력 파일의 단어 수를 계산합니다. 한 줄만 보내면 열 수를 알려줍니다.
당신은 시도 할 수 있습니다
고양이 파일 | awk '{print NF}'
파이썬이 설치되어 있다면 다음을 시도해 볼 수 있습니다.
python -c 'import sys;f=open(sys.argv[1]);print len(f.readline().split("|"))' \
stores.dat
이것은 일반적으로 필드 수를 계산하는 데 사용하는 것입니다.
head -n 1 file.name | awk -F'|' '{print NF; exit}'
Mat의 awk 솔루션과 유사한 Perl 솔루션 :
perl -F'\|' -lane 'print $#F+1; exit' stores.dat
1000000 열이있는 파일에서 이것을 테스트했습니다.
필드 구분자가 파이프 대신 공백 (하나 이상의 공백 또는 탭) 인 경우 :
perl -lane 'print $#F+1; exit' stores.dat
Cat Kerr 응답을 기반으로합니다. 이 명령은 solaris에서 작동합니다.
awk '{print NF; exit}' stores.dat
시도해 볼 수 있습니다.
head -1 stores.dat | grep -o \| | wc -l
파일의 행 (아래 예에서는 두 번째 행)을 선택하고 열 수를 계산합니다. 여기서 구분 기호는 공백입니다.
sed -n 2p text_file.dat | tr ' ' '\n' | wc -l
적절한 순수 bash 방법
bash에서는 간단하게 다음을 수행 할 수 있습니다.
IFS=\| read -ra headline <stores.dat
echo ${#headline[@]}
4
포크 가 없는 것 보다 훨씬 빠르며 $headline
전체 헤드 라인 을 유지하는 것처럼 재사용이 가능 합니다. 샘플을 위해 다음을 수행 할 수 있습니다.
printf " - %s\n" "${headline[@]}"
- sid
- storeNo
- latitude
- longitude
참고이 구문은 열 이름에서 공백과 기타 문자를 올바르게 구동합니다.
대안 : 각 행의 최대 열에 대한 강력한 이진 검사
일부 행에 추가 열이 있으면 어떻게됩니까?
이 명령은 구분 기호를 계산하여 더 큰 줄을 검색합니다 .
tr -dc $'\n|' <stores.dat |wc -L
3
최대 3 개의 구분 기호와 4 개의 필드가 있습니다.
참고 URL : https://stackoverflow.com/questions/8629330/unix-count-of-columns-in-file
'Program Tip' 카테고리의 다른 글
PHP에서 실시간 출력으로 프로세스 실행 (0) | 2020.11.13 |
---|---|
XML 문서에 HTML 내용을 삽입 할 수 있습니까? (0) | 2020.11.13 |
Symfony 2에서 모든 요청 매개 변수 얻기 (0) | 2020.11.13 |
htaccess를 사용하여 HTTP에서 http로 리디렉션 (0) | 2020.11.13 |
녹아웃 바인딩이 실행되기 전에 HTML이 표시되는 것을 방지하는 방법 (0) | 2020.11.13 |