Не то, что вы просили, но если дело только в том, что файлы удалены из vdi, и вы хотите очень быстрое решение:
Запустите ssh-сервер на вашем хосте (apt-get install openssh-server && service ssh restart). VirtualBox для создания виртуальной машины из существующего файла vdi, а затем загрузите эту виртуальную машину. (Я просто сохранил сетевой адаптер по умолчанию (NAT) при создании виртуальной машины.) Внутри виртуальной машины sftp для вашего хоста. (sftp hostuser@hostip) В сеансе sftp put столько файлов на хост, сколько вам нужно.Вот скрипт awk, который делает то, что вы хотите:
awk '
NR==FNR { C[$2]=1; next }
$1 == "C" { if (C[$2] == 1) { print; D[$3]=1 } }
$1 == "D" { if (D[$2] == 1) print }
' f1 f2
Вот несколько примеров данных.
$ cat f1
C 010
C 020
C 024
$ cat f2
C 005 Carbon
D Carbon 1
D Carbon 2
D Carbon 3
D Carbon 4
C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 017 Oxygen
D Oxygen 1
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
$ awk '
> NR==FNR { C[$2]=1; next }
> $1 == "C" { if (C[$2] == 1) { print; D[$3]=1 } }
> $1 == "D" { if (D[$2] == 1) print }
> ' f1 f2
C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
Вы можете поместить скрипт awk в свой собственный файл следующим образом: cmd.awk:
NR==FNR { C[$2]=1; next }
$1 == "C" { if (C[$2] == 1) { print; D[$3]=1 } }
$1 == "D" { if (D[$2] == 1) print }
Затем запустите его так:
Ваши желания, похоже, противоречат тому, что в настоящее время возможно.
Если вы хотите напечатать D из обоих файлов, используйте следующее: cat file1 file2 | grep -E '^D.+'
Проблема в том, что если вы делаете кошку, вы больше не будете знать имена файлов один раз трубопровод, поэтому вам нужно будет сделать что-то вроде: grep -El '^D.+' *