回答:
これを行う方法はawk
次のとおりです。
awk 'NR>2 {print t} {t=$0}'
また別の方法sed
:
sed '1d;x' file.txt
x
高度なsed
コマンドであり、現在の行を前の行に切り替えます。現在の行はバッファーに入り、前の行は画面に移動しますsed
。
awk
各ステップ(行)のソリューションは、現在の行を変数に入れ、2行目が通過した後にのみ出力を開始します。したがって、画面上の2行目から最後の1行目までの一連の行が乱雑になりました。行は変数内にあり、次のステップでのみ印刷される必要があるため、最後の行は省略されますが、すべてのステップがすでに実行されており、画面に行が表示されることはありません。
で同じアイデアperl
:
perl -ne 'print $t if $.>2 ; $t=$_' file.txt
$.
行番号と$_
現在の行を表します。構造の
perl -n
ショートカットであり、インラインスクリプト用です。while(<..>) {..}
-e
Pythonでは、このようにします。
#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
L = []
for line in f:
line = re.sub(r'\n', r'', line)
L.append(line)
print('\n'.join(L[1:-1]))
上記のコードをファイルに貼り付けて、という名前を付けますscript.py
。チェックするファイルに対してスクリプトを実行します。
python3 script.py /path/to/the/file
例:
$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana
Macユーザーの場合:
Macではhead -n -1
動作しません。代わりに、ファイルを反転し、最初の行を切り取り、次に元に戻します。
tail -r file.txt | tail -n +2 | tail -r
説明:
tail -r
:入力の行の順序を逆にします
tail -n +2
:入力の2行目から始まるすべての行を出力します
head -n -1
最初と最後の行を削除し.txt
ます。