У меня был тот же вопрос, и я впервые нашел этот ответ . Установил утилиту z ( https://github.com/rupa/z ).
Это именно то, что вы ищете, потому что z учится с ваших команд cd и отслеживает каталоги в соответствии с принципом frecency (часто и недавно). Итак, после того, как вы выполните обе команды cd один раз, вы можете сделать что-то вроде:
z docs
z ds
, чтобы перейти к / Project / Warnest / docs /
и ~ / Dropbox / Projects / ds / test /
соответственно. Аргументы для z - это регулярные выражения, поэтому вам даже не нужно вводить полное имя папки.
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
Судя по вашим комментариям, имена файлов можно описать так:
С помощью этой информации можно использовать 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)