Я пытаюсь найти строки из одного файла в другом файле, и мне нужно, чтобы строка поиска была напечатана один раз, а строки для следующих строк.
Строки, в которые я хочу найти совпадения, находятся в файл с 2 строками на запись, без пустых строк и т. д. Строка 1 содержит имя, строка 2 - строку, которую мне нужно найти во втором файле. sed -n '1~2p' напечатает все имена, но мне нужно будет напечатать только первое имя, передать значение второй строки в grep, выполнить команду grep, затем распечатать имя второй записи (строка 3), перейти по строке 4 до grep и так далее. Альтернативой может быть использование цикла while или until с счетчиком, увеличенным на 2, но тогда я не знаю, как передать значение счетчика sed.
Если вы правильно поняли, то задайте
$ head File\ {1..3}
==> File 1 <==
foo
Pattern 1
bar
==> File 2 <==
foo
bar
baz
==> File 3 <==
Pattern 3
foo
baz
и
$ cat infile
File 1
Pattern 1
File 2
Pattern 2
File 3
Pattern 3
, затем
$ sed -E '$!N; s/(.*)\n(.*)/grep -H -- "\2" "\1"/e' infile
File 1:Pattern 1
File 3:Pattern 3
или
$ while read -r file; do
if read -r pattern; then grep -H -- "$pattern" "$file"; fi
done < infile
File 1:Pattern 1
File 3:Pattern 3
Если вы правильно поняли, то задайте
$ head File\ {1..3}
==> File 1 <==
foo
Pattern 1
bar
==> File 2 <==
foo
bar
baz
==> File 3 <==
Pattern 3
foo
baz
и
$ cat infile
File 1
Pattern 1
File 2
Pattern 2
File 3
Pattern 3
, затем
$ sed -E '$!N; s/(.*)\n(.*)/grep -H -- "\2" "\1"/e' infile
File 1:Pattern 1
File 3:Pattern 3
или
$ while read -r file; do
if read -r pattern; then grep -H -- "$pattern" "$file"; fi
done < infile
File 1:Pattern 1
File 3:Pattern 3