한 줄에 두 개의 경로가 포함된 파일이 있습니다. 동일한 경로가 포함된 줄을 두 번 삭제하고 싶습니다.
저는 Linux와 Solaris에서 작업합니다. sed, awk 또는 perl에 코드 한 줄을 원합니다.
입력 파일 예:
/usr/lib/libgmp.so.3.3.3 /usr/lib/libgmp.so.3.3.3
/usr/lib/libxslt.so.1.1.17 /usr/lib/libxslt.so.1.1.17
/usr/lib/sse2/libgmp.so.3.3.3 /usr/lib/sse2/libgmp.so.3.3.3
/usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar /usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar
/usr/share/doc/libXrandr-1.1.1 /usr/share/doc/libXrandr-1.1.1
/usr/share/doc/libxslt-1.1.17 /usr/share/doc/libxslt-1.1.17
/etc/3.3.3.255 /etc/172.17.211.255
/etc/1.1.1.255 /etc/172.17.213.255
예상 출력:
/etc/3.3.3.255 /etc/172.17.211.255
/etc/1.1.1.255 /etc/172.17.213.255
답변1
awk '{ if ($1 != $2 ) print $1" "$2; }' file
파일을 적절한 파일로 바꾸시면 됩니다.
또는 댓글에서 @manatwork가 언급했듯이 더 간단합니다.
awk '$1!=$2' file
답변2
grep
정규식(정규식의 수학적 개념을 확장한 것)으로 반복되는 텍스트를 표현할 수 있습니다 .
grep -v '^ *\([^ ][^ ]*\) *\1 *$'
[^ ][^ ]*
공백이 아닌 하나 이상의 문자와 일치합니다. 백슬래시 괄호는 \1
"첫 번째 그룹과 동일한 텍스트"를 의미하는 그룹을 만듭니다 .
답변3
이것은 당신에게 도움이 될 수 있습니다 (GNU sed):
sed -r '/(\S+)\s\1/d' file