나는이 두 개의 파일을 가지고 있습니다 : -
[root@localhost base_filters]# cat aix_old
joe
amadeus
image
bill
juliet
charlie
romeo
ftp
[root@localhost base_filters]# cut -d: -f1 passwd2
henry
amadeus
image
bill
julie
jennifer
charlie
romeo
harry
두 파일의 차이점을 찾으려고하므로 다음 명령을 사용하고 있습니다.
[root@localhost base_filters]# cut -d: -f1 passwd2 | sort | diff `sort aix_old` -
하지만 다음과 같은 오류가 발생합니다.
diff: extra operand `charlie'
diff: Try `diff --help' for more information.
내용을 정렬하기 위해 다른 임시 파일을 사용할 수 있다는 것을 알고 있지만 aix_old
다른 임시 파일은 필요하지 않으므로 명령 대체를 사용해 보았습니다.
내가 뭘 잘못하고 있을지도 모릅니다.
답변1
ksh, zsh 또는 bash의 경우 프로세스 대체를 사용하십시오.
diff <(cut -d: -f1 passwd2 | sort) <(sort aix_old)
다음을 제공합니다:
4,5c4
< harry
< henry
---
> ftp
7,8c6,7
< jennifer
< julie
---
> joe
> juliet
diff -y <(cut -d: -f1 passwd2 | sort) <(sort aix_old)
다음을 제공합니다:
amadeus amadeus
bill bill
charlie charlie
harry | ftp
henry <
image image
jennifer | joe
julie | juliet
romeo romeo
프로세스 교체 위키에서:http://en.wikipedia.org/wiki/Process_substitution
Unix diff 명령은 일반적으로 비교할 두 파일의 이름, 즉 파일 이름과 표준 입력을 허용합니다. 프로세스 대체를 사용하면 두 프로그램의 출력을 직접 비교할 수 있습니다.
$ diff <(파일 1 정렬) <(파일 2 정렬)
이
<(command)
표현식은 명령 해석기에 명령을 실행하고 해당 출력을 파일로 표시하도록 지시합니다. 명령은 임의로 복잡한 쉘 명령일 수 있습니다.
또한 사용애쉬의프로세스 리디렉션(이 있는 시스템에서 /dev/fd/n
):
diff /dev/fd/3 3<(cut -d: -f1 passwd2 | sort) /dev/fd/4 4<(sort aix_old)
또는 Bourne과 유사한 쉘을 사용하는 것이 더 까다로울 수 있습니다(이 있는 시스템에서는 /dev/fd/n
).
cut -d: -f1 passwd2 | sort | {
sort aix_old 3<&- | diff /dev/fd/3 -
} 3<&0