파일에서 중복된 줄을 제거하고 새 파일에 고유한 줄을 저장하는 명령이 있습니다.
uniq telphone.txt output.txt
.txt
그런데 현재 폴더의 모든 파일을 검사하여 중복된 파일을 제거하고 동일한 파일 이름으로 저장하는 명령을 찾으려고 합니다.
telphone.txt
중복 항목을 제거하고 다른 이름으로 저장 합니다 telphone.txt
.
그런 다음 새 파일이 있으면 homes.txt
동일한 작업을 수행하고 homes.txt
.
가능합니까?
답변1
#!/bin/sh
tmpfile=$(mktemp)
for file in ./*.txt; do
cp "$file" "$tmpfile" &&
uniq "$tmpfile" >$file"
done
rm "$tmpfile"
그러면 현재 디렉터리로 끝나는 모든 이름을 반복 .txt
하고 각 이름에서 중복된 줄을 차례로 제거합니다.
파일은 먼저 임시 파일에 복사된 다음 을 사용하여 uniq
원본 파일 이름으로 출력됩니다.
이렇게 하면 원본 파일의 권한이 변경되지 않습니다(뒤에 가 오면 가 될 수 있음 uniq "$file" >"$tmpfile"
) cp "$tmpfile" "$file"
.
또한 호출의 성공 여부에 따라 달라집니다 uniq
. 실패 cp
하면 명령을 리디렉션하면 원본 파일이 잘리고 해당 데이터가 손실됩니다.cp
uniq
답변2
파일을 열 때 잘릴 uniq
수 있으므로 임시 파일을 사용해야 합니다 .>
이 시도,
for f in *.txt; do
tmpf=$(mktemp)
uniq "$f" "$tmpf" && mv "$tmpf" "$f"
done