использование sed для записи записей в файл и использование grep для всех записей

Я пытаюсь найти строки из одного файла в другом файле, и мне нужно, чтобы строка поиска была напечатана один раз, а строки для следующих строк.

Строки, в которые я хочу найти совпадения, находятся в файл с 2 строками на запись, без пустых строк и т. д. Строка 1 содержит имя, строка 2 - строку, которую мне нужно найти во втором файле. sed -n '1~2p' напечатает все имена, но мне нужно будет напечатать только первое имя, передать значение второй строки в grep, выполнить команду grep, затем распечатать имя второй записи (строка 3), перейти по строке 4 до grep и так далее. Альтернативой может быть использование цикла while или until с счетчиком, увеличенным на 2, но тогда я не знаю, как передать значение счетчика sed.

0
задан 7 November 2017 в 04:33

2 ответа

Если вы правильно поняли, то задайте

$ 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
2
ответ дан 18 July 2018 в 03:45

Если вы правильно поняли, то задайте

$ 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
2
ответ дан 24 July 2018 в 17:55

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

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