ファイルの最後の行を移動する方法は? [コピー]

ファイルの最後の行を移動する方法は? [コピー]

ファイルの例

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に変更します。$

関連情報