J'utiliserais probablement sed
pour ce travail :
line=3
sed -e "${line}r file2" file1
Si vous cherchez à écraser file1
et vous avez GNU sed
, ajoutez le -i
option. Sinon, écrivez dans un fichier temporaire, puis copiez/déplacez le fichier temporaire sur l'original, en nettoyant si nécessaire (c'est le trap
trucs ci-dessous). Remarque :copier le temporaire sur le fichier préserve les liens; le déplacement ne fonctionne pas (mais est plus rapide, surtout si le fichier est volumineux).
line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0
Juste pour le plaisir, et juste parce que nous aimons tous ed
, l'éditeur standard, voici un ed
version. C'est très efficace (ed
est un authentique éditeur de texte) !
ed -s file2 <<< $'3r file1\nw'
Si le numéro de ligne est stocké dans la variable line
puis :
ed -s file2 <<< "${line}r file1"$'\nw'
Juste pour faire plaisir à Zack, voici une version avec moins de bashisme, au cas où vous n'aimeriez pas bash (personnellement, je n'aime pas les pipes et les subshells, je préfère les herestrings, mais bon, comme je l'ai dit, c'est uniquement pour faire plaisir à Zack) :
printf "%s\n" "${line}r file1" w | ed -s file2
ou (pour plaire à Sorpigal):
printf "%dr %s\nw" "$line" file1 | ed -s file2
Comme Jonathan Leffler le mentionne dans un commentaire, et si vous avez l'intention d'utiliser cette méthode dans un script, utilisez un heredoc (c'est généralement le plus efficace) :
ed -s file2 <<EOF
${line}r file1
w
EOF
J'espère que cela vous aidera !
PS N'hésitez pas à laisser un commentaire si vous sentez que vous avez besoin de vous exprimer sur les façons de conduire ed
, l'éditeur standard.
cat file1 >>file2
ajoutera le contenu du fichier1 au fichier2.
cat file1 file2
concaténera file1 et file2 et enverra la sortie au terminal.
cat file1 file2 >file3
créera ou écrasera le fichier3 avec la concaténation du fichier1 et du fichier2
cat file1 file2 >>file3
ajoutera la concaténation de fichier1 et fichier2 à la fin de fichier3.
Modifier :
Pour l'agrégation du fichier 2 avant d'ajouter le fichier 1 :
sed -e '11,$d' -i file2 && cat file1 >>file2
ou pour faire un fichier de 500 lignes :
n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2