UNIX 쉘 스크립트의 목록에서 고유 값 또는 고유 값 선택
ksh 스크립트는 긴 값 목록을 반환하고 줄 바꿈을 구분하여 고유한 값/구체적인 값만 표시합니다.이거 할 수 있어?
예를 들어, 내 출력이 디렉토리 내의 파일서픽스라고 합니다.
tar gz java gz java tar class class
다음과 같은 목록을 봅니다.
tar gz java class
여기 보시면uniq
그리고.sort
적용들.
./yourscript.ksh | sort | uniq
(참고로, 이 명령어라인에서는 이러한 분류가 필요합니다.uniq
서로 바로 뒤에 있는 중복된 라인만 제거합니다.)
편집:
에런 디굴라가 올린 글과는 달리uniq
의 명령줄 옵션:
다음과 같은 입력이 주어집니다.
학급항아리항아리항아리휴지통휴지통자바
uniq
는 모든 행을 1회 정확하게 출력합니다.
학급항아리휴지통자바
uniq -d
는 여러 번 표시되는 모든 행을 출력하여 1회 인쇄합니다.
항아리휴지통
uniq -u
는, 1 회 정확하게 표시되는 모든 행을 출력해, 1 회 인쇄합니다.
학급자바
./script.sh | sort -u
zsh를 사용하면 다음을 수행할 수 있습니다.
% cat infile
tar
more than one word
gz
java
gz
java
tar
class
class
zsh-5.0.0[t]% print -l "${(fu)$(<infile)}"
tar
more than one word
gz
java
class
또는 AWK를 사용할 수 있습니다.
% awk '!_[$0]++' infile
tar
more than one word
gz
java
class
AWK를 사용하면 다음 작업을 수행할 수 있습니다.
./yourscript.ksh | awk '!a[$0]++'
정렬이나 유니크보다 더 빨리 찾을 수 있습니다.
파이프로 통과시키다sort
그리고.uniq
이렇게 하면 중복된 항목이 모두 제거됩니다.
uniq -d
중복된 내용만 제공합니다.uniq -u
는, 일의의 것(복제된 것)만을 나타냅니다.
정렬이 바람직하지 않을 수 있는 대규모 데이터 세트의 경우 다음 perl 스크립트를 사용할 수도 있습니다.
./yourscript.ksh | perl -ne 'if (!defined $x{$_}) { print $_; $x{$_} = 1; }'
기본적으로는 모든 라인 출력이 기억되기 때문에 다시 출력되지 않습니다.
"보다 유리합니다.sort | uniq
미리 분류할 필요가 없다는 점에서 해결책입니다.
요청에 따라 고유(단, 정렬되지 않음)
(시간 경과에 따라 테스트한 결과) 최대 70개 미만의 요소에 대해 시스템 리소스를 적게 사용합니다.
stdin에서 입력을 받도록 작성되었습니다.
(또는 수정하여 다른 스크립트에 포함):
(바쉬)
bag2set () {
# Reduce a_bag to a_set.
local -i i j n=${#a_bag[@]}
for ((i=0; i < n; i++)); do
if [[ -n ${a_bag[i]} ]]; then
a_set[i]=${a_bag[i]}
a_bag[i]=$'\0'
for ((j=i+1; j < n; j++)); do
[[ ${a_set[i]} == ${a_bag[j]} ]] && a_bag[j]=$'\0'
done
fi
done
}
declare -a a_bag=() a_set=()
stdin="$(</dev/stdin)"
declare -i i=0
for e in $stdin; do
a_bag[i]=$e
i=$i+1
done
bag2set
echo "${a_set[@]}"
파일의 중복되지 않는 엔트리를 취득하기 위한 힌트를 얻을 수 있습니다.
awk '$0 != x ":FOO" && NR>1 {print x} {x=$0} END {print}' file_name | uniq -f1 -u
언급URL : https://stackoverflow.com/questions/618378/select-unique-or-distinct-values-from-a-list-in-unix-shell-script
'it-source' 카테고리의 다른 글
sql server 개체 이름 - 그러나 테이블이 SSMS 테이블 목록에 나열됩니다. (0) | 2023.04.16 |
---|---|
WPF 앱을 화면 중앙에 배치하는 방법 (0) | 2023.04.16 |
Mac OS X(iTerm)에서 zsh를 로그인 셸로 실행하는 방법 (0) | 2023.04.16 |
SQL 서버를 사용하여 문자열을 잘라내는 방법 (0) | 2023.04.16 |
Excel VBA의 OnClick (0) | 2023.04.16 |