「tac」を使わずにファイルの行を逆に印刷する方法は?

「tac」を使わずにファイルの行を逆に印刷する方法は?

tacコマンドを使わずにファイルの行を逆に印刷したいです。 Bashでこのようなタスクを実行できる他のソリューションはありますか?

答え1

sedシミュレーションに使用tac:

sed '1!G;h;$!d' "${inputfile}"

答え2

そしてed

ed -s infile <<IN
g/^/m0
,p
q
IN

あなたがBSD/ OSX(そして欲しいならまもなくGNU/linuxまたこれはPOSIXになります):

tail -r infile

答え3

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file.txt

渡す一行ずつ

答え4

bashでこれを要求したように、awk、sed、またはperlを使用せずにbash機能のみを使用するソリューションは次のとおりです。

reverse ()
{
    local line
    if IFS= read -r line
    then
        reverse
        printf '%s\n' "$line"
    fi
}

出力

echo 'a
b
c
d
' | reverse

はい

d
c
b
a

予想通り。

ただし、行は再帰的に呼び出される関数インスタンスごとに1つずつメモリに格納されます。大容量ファイルを扱うときは注意してください。

関連情報