ファイルの例
line 1
line 2
line 3
line 4
line 4
その後になければなりませんline 1
line 1
line 4
line 2
line 3
重要:4行以上になることがあります。スクリプトは何とか最後の行を読む必要があることを理解する必要があります。いいえ4号線。
答え1
もう一つの遅くて長いバージョンです。
#!/bin/sh
if [ ! -f "$1" ]
then
printf "No input file\n"
exit
fi
FIRST=`head -n 1 "${1}"`
LAST=`tail -n 1 "${1}"`
MID=`sed -n '$d; 2,$p' "${1}"`
printf "${FIRST}\n${LAST}\n${MID}\n"
exit
head
を使用するたびにファイルにアクセスするため、速度が遅くtail
なりますsed
。大容量ファイル(または複数のファイル)では、この現象が非常に目立つように見えることがあります。
答え2
$ printf '4m1\n,p\n' | ed -s file
line 1
line 4
line 2
line 3
短いed
スクリプト
4m1
,p
1行目の後ろに4行目を移動し、編集バッファの内容を端末に表示します。
結果を新しいファイルに保存するには、次のリダイレクトを使用できます。
printf '4m1\n,p\n' | ed -s file >newfile
ed
またはファイルを保存するように言うことができます
printf '4m1\nw newfile\n' | ed -s file
このコマンドは、w newfile
編集したバッファを指定されたファイルに保存します。ファイル名を持たないコマンドは、w
ファイルを元のファイル名で保存します。
行エディタはed
ファイルをメモリに読み込むため、ファイルサイズが適切ですが大きすぎない(1 GB未満)場合、このタイプの操作に使用できます。
移動最後行から上記のコマンドの項目4
に変更します。$