Probabilmente userei sed
per questo lavoro:
line=3
sed -e "${line}r file2" file1
Se stai cercando di sovrascrivere file1
e hai GNU sed
, aggiungi il -i
opzione. Altrimenti, scrivi su un file temporaneo e poi copia/sposta il file temporaneo sull'originale, ripulendo se necessario (questo è il trap
cose sotto). Nota:la copia del temporaneo sul file conserva i collegamenti; lo spostamento no (ma è più veloce, specialmente se il file è grande).
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
Solo per divertimento e solo perché tutti amiamo ed
, l'editor standard, ecco un ed
versione. È molto efficiente (ed
è un genuino editor di testo)!
ed -s file2 <<< $'3r file1\nw'
Se il numero di riga è memorizzato nella variabile line
quindi:
ed -s file2 <<< "${line}r file1"$'\nw'
Giusto per compiacere Zack, ecco una versione con meno bashismo, nel caso in cui non ti piaccia bash (personalmente, non mi piacciono i tubi e le subshell, preferisco le corde, ma ehi, come ho detto, è solo per compiacere Zack):
printf "%s\n" "${line}r file1" w | ed -s file2
o (per compiacere Sorpigal):
printf "%dr %s\nw" "$line" file1 | ed -s file2
Come menziona Jonathan Leffler in un commento, e se intendi usare questo metodo in uno script, usa un heredoc (di solito è il più efficiente):
ed -s file2 <<EOF
${line}r file1
w
EOF
Spero che questo aiuti!
P.S. Non esitare a lasciare un commento se ritieni di dover esprimere te stesso sui modi per guidare ed
, l'editor standard.
cat file1 >>file2
aggiungerà il contenuto di file1 a file2.
cat file1 file2
concatenerà file1 e file2 e invierà l'output al terminale.
cat file1 file2 >file3
creerà o sovrascriverà file3 con la concatenazione di file1 e file2
cat file1 file2 >>file3
aggiungerà la concatenazione di file1 e file2 alla fine di file3.
Modifica :
Per il trunking file2 prima di aggiungere file1:
sed -e '11,$d' -i file2 && cat file1 >>file2
o per creare un file di 500 righe:
n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2