両方のファイルを比較し、シェルスクリプトを使用してテーブル形式で違いを表示する必要があります。例えば。
ファイル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
cat file1| awk -F "-" '{print $2}'| sed "s/\.[a-z].*//g">file_1_final.txt
cat file2| awk -F "-" '{print $2}'| sed "s/\.[a-z].*//g">file_2_final.txt
paste file_1_final.txt file_2_final.txt | sed '1i file1 file2' >combined_file1_file2
awk -F "-" 'NR==FNR{a[$1];next}($1 in a){print $1}' file1 file2>>common_difference_file_1_2
awk -F "-" 'NR==FNR{a[$1];next}!($1 in a){print $1}' file1 file2>>common_difference_file_1_2
sed -i '1i name' common_difference_file_1_2
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)