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つずつメモリに格納されます。大容量ファイルを扱うときは注意してください。