РЕДАКТИРОВАТЬ 2: Так как OP упомянул фактические образцы сейчас, которые отличаются от предыдущих, поэтому добавьте это сейчас.
awk '
FNR==NR{
if(!NF){
flag=""
}
if($0=="Direct"){
flag=1
}
if(flag){
array[++count]=$1 OFS $2 OFS $3
}
next
}
/ATOMIC_POSITIONS {crystal}/{
found=1
}
!NF{
found=count1=""
}
found{
print $1"\t"array[++count1]
next
}
1
' Input_file2 Input_file1
Если доволен результатом выше, тодобавьте > temp && mv temp Input_file1
к вышеуказанному.
РЕДАКТИРОВАТЬ: Поскольку уточненный вопрос OP больше узнать, номер строки из источника (Input_file2) можетбудет отличаться от цели (Input_file1), поэтому предположим, что у нас есть следующие Input_files.
awk -v source_row="10,11,12,13,14,15,16,17" -v target_row="37,38,39,40,41,42,43,44" '
BEGIN{
split(source_row,array_source,",")
num=split(target_row,array_target,",")
for(i=1;i<=num;i++){
replace_array[array_target[i]]
}
}
FNR==NR{
a[FNR]=$1 OFS $2 OFS $3
next
}
(FNR in replace_array){
print $1"\t"a[array_source[++count]]
next
}
1
' Input_file2 Input_file1
Где переменные source_row
для Input_file, откуда нам нужно получить значения и переменную target_row
для целевого Input_file, гденам нужно разместить строки.
Чтобы сохранить вывод в Input_file1, добавьте последнюю из вышеприведенных команд > temp && mv temp Input_file1
В случае, если вы хотите заменить строки в Input_file1 на строкузатем попробуйте следующий.
awk 'FNR==NR{a[FNR]=$1 OFS $2 OFS $3;next} {print $1,a[FNR]}' Input_file2 Input_file1
Вывод будет следующим.
XX b1 b2 b3
YY b4 b5 b6