두 파일의 각 열을 비교하고 일치하지 않는 열을 표시하는 일부 ID와 함께 다른 파일에 해당 차이점을 작성해야 하는 요구 사항이 있습니다.일치하지 않는 열을 지적하는 것이 나의 주요 문제 설명입니다.예를 들어 다음과 같은 파일이 있습니다.
File 1
1|piyush|bangalore|dev
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|delhi|QA
File 2
1|piyush|bangalore|QA
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|bangalore|dev
예상되는 출력 파일은 다음과 같습니다.
File 1
1|piyush|bangalore|**dev**
File 2
1|piyush|bangalore|**QA**
File 1
3|rohit|**delhi**|**QA**
File 2
3|rohit|**bangalore**|**dev**
일치하지 않는 열과 일치하지 않는 행을 볼 수 있도록 기능을 구현하고 싶습니다. 나는 노력했다
diff File1 File2 > Diff_File
하지만 이는 일치하지 않는 레코드나 행만 제공합니다.또한 일치하지 않는 열을 지적할 방법도 없습니다.제가 처음 접하는 쉘 스크립트나 awk 명령을 사용할 수 있다면 도와주세요. 미리 감사드립니다.
답변1
파이썬3.x 솔루션:
diff_marked.py스크립트:
import sys
file1_name = sys.argv[1]
file2_name = sys.argv[2]
with open(file1_name, 'r') as f1, open(file2_name, 'r') as f2:
f1_lines = f1.readlines() # list of lines of File1
f2_lines = f2.readlines() # list of lines of File2
for k,l in enumerate(f1_lines):
f1_fields = l.strip().split('|') # splitting a line into fields by separator '|'
if k < len(f2_lines) and f2_lines[k]:
has_diff = False
f2_fields = f2_lines[k].strip().split('|')
for i,f in enumerate(f1_fields):
if f != f2_fields[i]: # comparing respective lines 'field-by-field' between two files
f1_fields[i] = '**' + f + '**' # wrapping differing fields
f2_fields[i] = '**' + f2_fields[i] + '**'
has_diff = True
if has_diff:
print(f1.name) # print file name
print('|'.join(f1_fields))
print(f2.name)
print('|'.join(f2_fields))
용법:(다른 Python 버전이 있을 수 있습니다. 현재 사례는 테스트되었습니다.파이썬 3.5)
python3.5 diff_marked.py File1 File2 > diff_output
diff_output
콘텐츠:
File1
1|piyush|bangalore|**dev**
File2
1|piyush|bangalore|**QA**
File1
3|rohit|**delhi**|**QA**
File2
3|rohit|**bangalore**|**dev**