Я дал это go, не глядя на существующие ответы, и придумал примерно тот же ответ, что и Равиндер.
awk '
FNR == NR {
line[FNR] = $0
next
}
/^system_props/ {
if (!nocopy)
for (x = 0 ; x < length(line) ; x++ )
print line[x]
nocopy=1
next
}
{
print
} ' <( grep ^system_props file1 ) file2
Лично мне больше нравится решение Равиндера. Его переменная count
совпадает с моей переменной nocopy
. И он использует одну переменную для захвата system_props из первого файла, тогда как я использую массив.
Кроме того, Ravinder ищет строки «^ system_props» в awk, тогда как я возлагаю эту ответственность на grep. Однако некоторые могут подумать, что синтаксис <(), который я использую для grep, может быть излишне сложным. </p>
Я также заметил, что Равиндер использовал идиому awk 1
, чтобы всегда указывать печать, что эквивалентно тому, что я прописал с {print}
. Мне нравится подход Равиндера, потому что он короче (хотя, возможно, менее очевиден для читателя).