행을 정렬하지 않고 중복된 행을 제거하고 싶습니다. 또한 선행 공백을 무시하고 싶습니다.
고양이 테스트.txt
abc
def
pqr
abc
xyz
def
efg
그러면 출력은 다음과 같아야 합니다.
abc
def
pqr
xyz
efg
답변1
이 시도:
$ awk 'NF && !($1 in a){a[$1];p=$1;print (getline == 0) ? p : p"\n"}' cat
abc
def
pqr
xyz
efg
설명하다
NF && !($1 in a)
: 비어 있지 않고 값이 연관 배열에 아직 나타나지 않은 행만 처리합니다a
.a[$1]
: 값이 나타나지 않으면 연관 배열에 저장합니다a
.p=$1;print (getline == 0) ? $1 : p"\n"
: 값을 변수에 저장합니다p
. 파일의 끝이 아니면 변수p
랩을 인쇄하고, 파일의 끝이 아니면p
값만 인쇄합니다.
답변2
이 명령이 작동해야 합니다.
awk '{$1=$1}1' filename | awk ' !x[$0]++'
첫 번째 awk 명령은 파일의 모든 선행 공백을 제거하고, 두 번째 awk 명령은 고유한 요소만 인쇄합니다.
답변3
삭제하고 싶다면모두중복(반복되는 빈 줄 포함)
awk '{if ($1 in a) next; a[$1]=$0; print}' test.txt
반복되는 빈 줄을 유지하려면
awk '/^$/ {print; next} {if ($1 in a) next; a[$1]=$0; print}' test.txt
답변4
명령 사용 unique
예karrick/unique
:
$ cat test.txt | tr -d ' ' | unique
abc
def
pqr
xyz
efg