두 파일을 비교하여 테이블 형식으로 표시하는 방법

두 파일을 비교하여 테이블 형식으로 표시하는 방법

두 파일을 비교하고 쉘 스크립트를 사용하여 테이블 형식으로 차이점을 표시해야 합니다. 예를 들어.

파일 1.txt

ap-2.21.3.rpm
bp-3.42.4.rpm
cp-devel-3.23.2.rpm
ep-devel- 2.23.2-23.rpm

파일 2.txt

ap-2.21.3.rpm
bp-3.43.4.rpm
cp-devel-4.33.2.rpm
dp-4.52.4.rpm

출력은 다음과 같습니다.

Name                           |        file1              | file2
-------------------------------+---------------------------+---------------------------
bp                             |         3.42.4            | 3.43.4
cp-devel                       |         3.23.2            | 4.33.2
dp                             |                           | 4.52.4
ep-devel                       |         2.23.2-23         | 

답변1

  1. cat file1| awk -F "-" '{print $2}'| sed "s/\.[a-z].*//g">file_1_final.txt
  2. cat file2| awk -F "-" '{print $2}'| sed "s/\.[a-z].*//g">file_2_final.txt
  3. paste file_1_final.txt file_2_final.txt | sed '1i file1 file2' >combined_file1_file2
  4. awk -F "-" 'NR==FNR{a[$1];next}($1 in a){print $1}' file1 file2>>common_difference_file_1_2
  5. awk -F "-" 'NR==FNR{a[$1];next}!($1 in a){print $1}' file1 file2>>common_difference_file_1_2
  6. sed -i '1i name' common_difference_file_1_2
  7. paste common_difference_file_1_2 combined_file1_file2

산출:

name    file1     file2
ap  2.21.3  2.35.3
bp  3.42.4  3.43.4
cp  3.23.2  4.33.2
dp      4.52.4

답변2

귀하의 의견에 따르면 파일 이름은 다음과 같이 설명될 수 있습니다.

  • 프로그램 버전은 숫자, 점, 하이픈으로 구성되며 앞에 하이픈이 옵니다.
  • 프로그램 이름은 모두 하이픈 앞의 문자입니다.
  • 버전 번호는 점과 문자로 다음 블록으로 구분됩니다.

sed이 정보를 사용하여 프로그램 이름과 버전 번호만 포함된 각 파일에 대한 테이블의 이름을 변환하는 데 사용할 수 있습니다 .

$ sed -n 's|^\(.\+\)-\([0-9.-]\+\)\..*|\1 \2|p' file1.txt 
$ sed -n 's|^\(.\+\)-\([0-9.-]\+\)\..*|\1 \2|p' file2.txt 

awk그런 다음 두 파일의 프로그램 이름을 수집하고 각 파일에 각 프로그램의 버전을 저장하고 요약 테이블을 인쇄하는 데 사용할 수 있습니다 .

$ awk -v FS=" " -v OFS="\t" ' \
    { program[$1]++; } \
    NR==FNR { f1[$1] = $2; next; } \
    { f2[$1] = $2; } \
    END { for(i in program) print i, f1[i], f2[i]; }' \
   <(sed -n 's|^\(.\+\)-\([0-9.-]\+\)\..*|\1 \2|p' file1.txt) \
   <(sed -n 's|^\(.\+\)-\([0-9.-]\+\)\..*|\1 \2|p' file2.txt)

관련 정보