2012-09-26 2 views
2

"fileA.txt"및 "fileB.txt"라는 두 개의 파일이 있습니다.두 파일의 내용을 동시에 삭제 - UNIX

1 Arizona ABDJAQ 224 
2 Ohio  AKOGFR 458 
3 Wisconsin EFGTAP 871 
4 Colorado NAHBAX 991 

위의 네 개의 열이

fileB.txt은 다음과 같은 내용이있다 "ID", "주", "패턴", "수"있습니다

fileA.txt은 다음과 같은 내용을 가지고 :

1 Arizona NKIGAB 763 
2 Ohio  BAVYAD 918 
3 Wisconsin AUOBAQ 547 
4 Colorado INABEA 622 

는 다시 네 개의 열은 "ID", "주", "패턴", "수"

없음 있습니다 이게 내가하고 싶은 일이다.

먼저 "fileA.txt"를 스캔하고 "패턴"열에 "A"가 하나있는 모든 레코드를 제거하고 싶다. 두 개의 "A"가있는 모든 기록을 보관하십시오. 그래서 나는 오하이오와 위스콘신을 제거 할 것입니다. (ID "2"및 ID "3"). 동시에, 나는 또한이 ID를 "fileB.txt"에서 동시에 제거하고 싶다 !! (사실 fileB, 오하이오 및 위스콘신에서 패턴에 2 개의 "A"를 가짐).

1 Arizona NKIGAB 763 
4 Colorado INABEA 622 

다음, 나는 검사 할 "같이한다

1 Arizona ABDJAQ 224 
4 Colorado NAHBAX 991 

내"fileB.txt ":이 단계 후

내"fileA.txt "는 같아야합니다 fileB.txt "를 사용하여"A "가 하나있는 패턴이있는 레코드를 제거하고"fileA.txt "에서 해당 레코드를 삭제합니다.

: (.이 fileB 만 "A"를 가지고 있으며, 그래서 우리는 fileB와 FILEA 모두에서 애리조나를 제거하기 때문에이 경우에는 애리조나)

이 단계 후, 나는 각 파일에 하나의 레코드 만 남아있을 것입니다 "fileA.txt"는 것입니다 : "fileB.txt는"짧은에 넣어, 그래서

4 Colorado INABEA 622 

이있을 것이다

4 Colorado NAHBAX 991 

을하고, 나는 두 파일을 스캔 만 기록을 유지하려는 파에 2 개의 "A"가있다. 두 파일 모두에서 ttern.

한 줄로 된 Unix 명령이나 비교적 쉬운 방법이 있습니까?

도움말에 감사드립니다.

+0

누군가가 'awk' one-liner를 제안 할 것입니다. – none

+0

나는 그렇게 희망한다. 나는 이것을 위해 파이썬 스크립트를 작성했지만, 정말 정말 한줄짜리를 원한다. – user1691717

+0

Python 스크립트는 꽤 괜찮습니다. 왜 한 온 라인을 원하니? 이것은 사소한 작업처럼 보이지 않습니다. 전체 화면을 사용하여 설명했습니다. – Grzegorz

답변

0

필자는 파이썬 (280 자의 코드)으로 한 줄짜리 코드를 작성했습니다.

python -c"import re,sys;o=lambda f,m:open(f,m);x=lambda h:[i for i in o(h,'r').readlines()];y=lambda s:len(re.findall(r'(\w+)',s)[2].split('A'))>2;z=lambda f,s:o(f,'a'if len(s)else'w').write(s);a,b=sys.argv[1:3];w=zip(x(a),x(b));z(a,'');z(b,'');[(z(a,c),z(b,d))for(c,d)in w if y(c)and y(d)]" a.txt b.txt 

참고 :이 코드는 파일 설명자를 닫지 않습니다. OS가 그렇게한다고 가정합니다.

관련 문제