우분투에서 새 파일을 만들지 않고 파일에서 중복 줄을 제거합니다.

우분투에서 새 파일을 만들지 않고 파일에서 중복 줄을 제거합니다.

새 파일을 만들지 않고 파일에서 중복 항목을 제거하고 파일 내용의 순서를 보존할 수 있는 명령을 찾을 수 없는 것 같습니다.

uniq및 외에 다른 명령이 있습니까 awk?

sed그렇지 않은 경우 내부 옵션이 포함되어 있음을 알고 있습니다 . 중복을 제거하는 데 사용하는 방법을 모르겠습니다.

중복된 샘플.txt가 있습니다.

1
2
1
4
1

중복된 샘플.txt 제거

1
2
4

답변1

특히 GNU awk와 최근 획득한 내부 편집 기능을 사용하여

$ cat file
1
2
1
3
4
1
$ awk -i inplace '!seen[$0]++' file
$ cat file
1
2
3
4

sed -i를 들어 "내부 편집"을 수행하는 대부분의 도구와 마찬가지로 임시 파일을 사용하여 편집을 수행합니다. 그러나 파일을 수동으로 이동할 필요는 없습니다.

또한보십시오:

답변2

명령이 중단되면 파일이 손상될 위험이 있습니다.

{ awk '!seen[$0]++'; 
 python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'; } <sample.txt 1<>sample.txt

중괄호 안에 명령 그룹을 만들고 그룹의 표준 입력을 로 sample.text리디렉션 sample.txt하고 1<>sample.txt.

awk '!seen[$0]++'~이다엉뚱한 숙어순서를 유지하면서 중복을 제거하는 데 사용됩니다.

명령이 끝나면 awk표준 출력에 해당하는 파일 설명자는 일부 중간 위치에 있으므로 sample.txt해당 sample.txt위치에서 잘라야 합니다. 나는 이것을 달성하는 두 가지 방법을 생각할 수 있습니다

  1. python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'python설치시 옵션입니다

  2. GNU Linux 시스템의 경우truncate -s "$(awk '/^pos:/{print $2}' /proc/$$/fdinfo/1)" sample.txt

답변3

sort와 함께-o

sort -u sample.txt -o sample.txt

-u독특함을 위해

-o출력 파일 이름의 경우

관련 정보