음, 두 개의 폴더가 있습니다. 단순화를 위해 players
sum 이라고 부르겠습니다 items
. items 폴더에는 각 항목에 대한 파일이 포함되어 있고, people 폴더에는 각 사람에 대한 파일이 포함되어 있으며, 여기에는 해당 사람이 소유한 동물에 대한 참조가 포함되어 있습니다. 이것이 내가 지금까지 가지고 있는 것입니다:
ls -1 ~/items | cut -d. -f1 | grep -R -f - ~/player
내가 얻은 grep 구문여기. 나는 그것을 말하려고 노력하고 있습니다 :
electric: 8
laser: 7
loltrail: 2
-c
대신 플래그를 추가 grep
하고 다음을 얻습니다.
Bob.txt: 0
Cathy.txt: 0
John.txt: 0
Patrick.txt: 1
1인당 물품 개수가 아닌 총 물품 개수를 구하려면 어떻게 해야 하나요?
이는 얼마나 많은 프로젝트가 사용 중인지 파악하는 것입니다.매장을 클릭하세요Garry's Mod용 플러그인.
답변1
GNU를 사용하여 원하는 결과를 얻는 방법은 다음과 같습니다 awk
.
awk '
BEGINFILE {
if (FILENAME ~ "^animals/" || FILENAME ~ "/animals/") {
this_name = substr(FILENAME, index(FILENAME,"animals/")+length("animals/"))
i = index(this_name, ".")
if (i > 0) this_name = substr(this_name, 1, i-1)
critter[++num] = this_name
critter_count[num] = 0
nextfile
}
}
{
for (i = 1; i <= num; i++) {
if ($0 ~ critter[i]) critter_count[i]++
}
}
END {
for (i = 1; i <= num; i++) print critter[i] ": " critter_count[i]
}
' animals/* people/*
새 파일( )을 시작할 때
BEGINFILE
이름이 , 또는animals/
로 시작하는지 확인하세요/animals/
. 그렇다면,animals/*
./animals/*
~/animals/*
- 오른쪽 부분 문자열을 추출합니다
animals/
. - 그런 다음 하나를 찾고
.
, 발견되면 왼쪽에 있는 하위 문자열을 추출합니다. - 이 문자열(기본 파일 이름, 제거된 디렉터리 및 확장자)을
critter[]
배열에 추가하고 해당 문자열을critter_count
0으로 초기화합니다.
☛ POSIX awk에서는
BEGINFILE
및를nextfile
사용할 수 없습니다.- 오른쪽 부분 문자열을 추출합니다
- 그렇지 않은 경우(파일을 보고 있는 경우
people
) 동물 이름을 반복하여critter
일치하는 줄 수를 셉니다. - 모든 입력 에 도달 한 후
END
파일 이름에서 추출된 동물 이름animals
과 각 동물 이름이 파일에 나타나는 빈도를 보고합니다people
.
이것은 디렉토리를 재귀적으로 검색하지 않습니다 people
. 질문에 필요한 설명이 표시되지 않습니다.
답변2
grep
using 에 패턴을 입력하면 stdin
모든 패턴의 결과가 연결될 것이라고 생각합니다. 제가 아는 한, 이 문제를 해결하는 유일한 방법은 각 패턴에 대해 새로운 grep 인스턴스를 호출하는 것입니다.
이 스크립트는 이 경우에 작동합니다.
for animalName in $(ls -1 ~/animals | cut -d. -f1);
do
echo "$animalName: $(grep -R -h -c $animalName ~/people | paste -sd+ | bc)";
done
이는 시도한 사소한 변경 사항 중 일부와 일치합니다. 첫째, -h
옵션은 grep
파일 이름 인쇄를 비활성화합니다. 둘째, 을 사용하면 grep
패턴의 출력은 다음과 유사합니다.
1
0
3
2
우리는 이 숫자를 모두 더하고 싶습니다. paste
이 명령은 행을 a와 연결 +
한 다음 결과 문자열을 전달하여 bc
결과를 계산합니다.
참고: 동물 이름에 줄 바꿈이나 특수 문자(이상한 위치)가 포함된 경우 구문 분석을 권장하지 않습니다 ls
.