Печать нескольких строк, начинающихся с & ldquo; D & rdquo; после нескольких графов

Не то, что вы просили, но если дело только в том, что файлы удалены из vdi, и вы хотите очень быстрое решение:

Запустите ssh-сервер на вашем хосте (apt-get install openssh-server && service ssh restart). VirtualBox для создания виртуальной машины из существующего файла vdi, а затем загрузите эту виртуальную машину. (Я просто сохранил сетевой адаптер по умолчанию (NAT) при создании виртуальной машины.) Внутри виртуальной машины sftp для вашего хоста. (sftp hostuser@hostip) В сеансе sftp put столько файлов на хост, сколько вам нужно.
1
задан 18 September 2013 в 05:05

2 ответа

Вот скрипт 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

Результаты [ ! d3]
$ 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 }

Затем запустите его так:

2
ответ дан 24 May 2018 в 17:53
  • 1
    О, это здорово. Спасибо, слм. Я проверю это завтра и дам вам знать. – Muhammad Sufian 18 September 2013 в 22:42

Ваши желания, похоже, противоречат тому, что в настоящее время возможно.

Если вы хотите напечатать D из обоих файлов, используйте следующее: cat file1 file2 | grep -E '^D.+'

Проблема в том, что если вы делаете кошку, вы больше не будете знать имена файлов один раз трубопровод, поэтому вам нужно будет сделать что-то вроде: grep -El '^D.+' *

0
ответ дан 24 May 2018 в 17:53
  • 1
    Посмотрите разницу между текстовым файлом-2 и моим желаемым выходом. Я не хочу печатать данные для "Carbon" и "кислород". – Muhammad Sufian 17 September 2013 в 21:41
  • 2
    Дорогой josten, спасибо за ваши добрые усилия. Но это grepping приблизительно все данные из файла2. Тем временем скрипт @steeldriver работал для меня. – Muhammad Sufian 18 September 2013 в 10:48

Другие вопросы по тегам:

Похожие вопросы: