回答:
これを行う方法は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ます。