sedが私のファイルを逆順に書くのはなぜですか?
old_file.txt
次のデータを含むテキストファイル()を読み取る必要があります。
ファイル内容old_file.txt
:
1.00
2.00
3.00
以下を含む2番目のファイルがあります。
ファイル内容new_file.txt
:
AAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
nth
カーソルをファイル行に移動しnew_file.txt
、次のようにすべての内容を挿入する必要がありますold_file.txt
。
私は必要です:
AAAA
BBBB
CCCC
1.00 <--
2.00 <--
3.00 <--
DDDD
EEEE
FFFF
GGGG
しかし、私は次のようになります。
私が得るもの:
AAAA
BBBB
CCCC
3.00 <--
2.00 <--
1.00 <--
DDDD
EEEE
FFFF
GGGG
これは私のコードです。
#!/bin/bash
line=3 # line that I need (exemple)
while read x
do
sed -i "${line}a\ $x" new_file.txt
done < old_file.txt
なぜ文が逆順で起こるのか分からない!
答え1
これは、ループが1.00
after CCCC
、after 2.00
、CCCC
after3.00
に追加されるために発生しますCCCC
。
希望の注文を受け取るには私行(n + 1)の前に挿入してください$x
。しかし、以下を使用する場合、シェルループはまったく必要ありません。アル字型ファイルから直接読む:
sed -i "${line}"'r old_file.txt' new_file.txt
答え2
sedがない代替品です。
#!/bin/bash
line=3
{ head -${line} new_file.txt ; cat old_file.txt; tail +$((line+1)) new_file.txt ; }
つまり、$line
最初の数行をnew_file
出力にコピーし、次の行全体をコピーし、残りの行をold_file
出力new_file
にコピーしますline+1
。