Вот простой способ сделать это с помощью gawk, у которого есть встроенная переменная ARGIND
, индекс в ARGV
текущего обрабатываемого файла.
Мы разделяем каждую входную строку первого файла на -
и используем первое поле для индексации в массив таблицу
, в которой хранится вся строка. Для второго файла (и любых последующих файлов) мы используем всю строку в качестве индекса в таблице
, чтобы получить желаемую строку.
BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}
Или однострочно:
awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2
Вот еще одна версия, которая будет работать с традиционным awk. Он определяет, является ли текущий файл первым файлом, сравнивая FNR
, номер входной записи в текущем входном файле с NR
, общим количеством входных записей, просмотренных на данный момент.
awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2
Вы можете использовать команду convert
:
convert input.jpg -rotate -degrees out.jpg
например:
convert input.jpg -rotate -180 out.jpg
Сохранить под тем же именем:
convert file.jpg -rotate -180 file.jpg
Повернуть все файлы :
for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done
Редактировать
Вы можете использовать инструменты командной строки mogrify
(лучший инструмент), рекомендованные @don-crissti
mogrify -rotate 90 *.jpg
Для изображений JPEG и поворотов под прямым углом используйте jpegtran
или exiftran
, так как они могут поворачивать изображения без потерь.
for f in *.jpg ; do
jpegtran -rotate 180 "$f" > "${f%.jpg}-rotated.jpg"
done
Или для поворота на месте:
for f in *.jpg ; do
jpegtran -rotate 180 -outfile "$f" "$f"
done
exiftran
также имеет флаг -a
для автоматического поворота изображения на основе того, что указано в теге ориентации EXIF.
Обратите внимание, что два других ответа могут давать разные результаты в зависимости от ориентации EXIF :кажется, что convert
вращается относительно ориентации EXIF, а jpegtran
просто игнорирует ориентацию EXIF.
Это наблюдение привело меня к выводу, что на самом деле мне нужно отказаться от ориентации EXIF, поэтому я просто использовал exiftool
для удаления данных EXIF без дальнейшей потери данных (это также то, что делает jpegtran
, когда не выбрана опция -rotate
. дано, кажется ) :
exiftool -all= -o outfile.jpg infile.jpg
Я мог бы просто удалить ориентацию EXIF с помощью
exiftool -Orientation= -o outfile.jpg infile.jpg
или изменить его с помощью
exiftool -n -Orientation=1 -o outfile.jpg infile.jpg
(для этого более позднего случая вам нужно будет прочитать FAQ , чтобы понять параметр -n
, необходимый для exiftool
для перевода значения -Orientation
, и таблицу тегов EXIF ).