Использование comm
, поскольку файлы отсортированы:
comm -3 file1 file2 > result.txt
Вывод содержит строки, которые присутствуют в файле1
, но отсутствуют в файле2
, а также строки, которые присутствуют в файле2
, но не файл1
с префиксом табуляции.
Если файлы не отсортированы, сначала отсортируйте их. Предполагая, что вы используете bash, ksh или zsh, а не простой sh
:
comm -3 <(sort file1) <(sort file2) > result.txt
$ while read -r c1 c2 c3; do echo mv "$c3" "$c2"; done < info.txt
mv ERR315336_1.fastq.gz placenta_6c_ERR315336_1.fastq.gz
mv ERR315336_2.fastq.gz placenta_6c_ERR315336_2.fastq.gz
mv ERR315337_1.fastq.gz thyroid_5b_ERR315337_1.fastq.gz
mv ERR315337_2.fastq.gz thyroid_5b_ERR315337_2.fastq.gz
info.txt
строку за строкой и сохраните 3 поля (предполагается разделение пробелом/табуляцией) echo
для пробного запуска, удалите, как только все будет в порядке авк -ишлы:
cd directory-with-files
awk '{system("echo mv " $3 " " $2)}' < /path/to/info.txt
баш -эдлы:
cd directory-with-files
while read -r junk new old
do
echo mv "$old" "$new"
done < /path/to/info.txt
Удалите эхо, когда оно выглядит хорошо.
Это не приводит к ошибкам -при проверке наличия пробелов в именах файлов или меток -в кавычках в именах файлов.