Вы хотите использовать команду fc при указании списка вместо выполнения (-l)
fc -ln -1
Con awk, file2
que contiene el texto de reemplazo y file1
el texto repetido:
awk 'FNR == NR {baby[NR] = $0; next} /baby/ {count++; $NF = baby[count]} 1' file2 file1
Tenga en cuenta que file2
es el primer argumento del archivo aquí, no file1
.
Explicación:
FNR == NR
es cierto para el primer archivo leído por awk, así que file2
aquí. Para ese archivo, guardamos cada línea en una matriz, indexada por número de línea count
de cada línea que coincida con baby
, y obtenga la entrada de la matriz para ese conteo y reemplace el último campo con esa entrada. Obtengo una salida como:
~ awk 'FNR == NR {baby[NR] = $0; next} /baby/ {count++; $NF = baby[count]} 1' file2 file1
I love banana
I love mango
I love papaya
I love guava
I love peaches
I love D1
I love watermelon
I love banana
I love mango
I love papaya
I love guava
I love peaches
I love D2
I love watermelon
I love banana
I love mango
I love papaya
I love guava
I love peaches
I love D3
I love watermelon
I love banana
I love mango
I love papaya
I love guava
I love peaches
I love D4
I love watermelon
I love banana
I love mango
I love papaya
I love guava
I love peaches
I love D5
I love watermelon
Другой awk
awk -v f='file2' '$3=="baby"{getline $3 <f}1' file1
Каждый раз, когда field3 = baby в файле1, замените $3 строкой файла2.
Редактировать:
Если я правильно понял, ваша строка в файле 1 выглядит так:
Ilovepeaches
Ilovemybeautifulbabygirl
Ilovewatermelon
И вы хотите заменить каждого ребенка строкой из файла2
Итак, вы можете попробовать так:
awk -v search='baby' -v f='file2' '
$0 ~ search {
split($0,lign,search)
getline <f
$0=lign[1]$0lign[2]
}1' file1
выход:
Ilovepeaches
IlovemybeautifulD3girl
Ilovewatermelon