シェルコマンドを使用してASCIIファイルの最初のn行を削除する方法は?

シェルコマンドを使用してASCIIファイルの最初のn行を削除する方法は?

最初の5〜10行にASCIIテキスト情報が含まれており、その後に注意深く表に記された行列情報を含むいくつかのファイルがあります。シェルスクリプトで他のプログラムで純粋な行列情報を使用できるように、テキストの最初の数行を削除したいと思います。 bashシェルコマンドを使用してこれを行うにはどうすればよいですか?

役に立つ場合は、RedHatとUbuntu Linuxシステムを使用しています。

答え1

ファイルがシンボリックリンクまたはハードリンクでない限り、sed、tail、またはawkを使用できます。以下の例

$ cat t.txt
12
34
56
78
90

sed

$ sed -e '1,3d' < t.txt
78
90

一時ファイルなしでsedをその場で使用することもできますsed -i -e 1,3d yourfile。これは何も表示せず、ファイルをその場で変更するだけです。結果を別のコマンドにパイプする必要がない場合は、簡単です。

$ tail -n +4 t.txt
78
90

アッ

$ awk 'NR > 3 { print }' < t.txt
78
90

答え2

sed -i '1,3d' file.txt

file.txtから最初の3行が削除されます。

答え3

リスト行がタブ文字のある行の場合:

grep '␉' <input_file >output_file

リテラルタブで)またはそれに対応するもの

sed -n '/␉/p' <input_file >output_file

bash / ksh / zshスクリプトでは、または$'\t'などのタブを作成できます。grep $'\t'sed -n $'/\t/p'

ファイルの最初の10行を削除するには:

tail -n +11 <input_file >output_file

(これは「行11から始まる」を意味し、尾番号付けが行1から始まるので、+11行10を削除することです)+11

sed '1,10d' <input_file >output_file

Linuxでは、GNU sedのオプションを利用して-iファイルを変更できます。

sed -i -n '/\t/p' *.txt

あるいは、シェルループと一時ファイルを使用できます。

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

または、ファイルを現在の場所で変更せずに別の名前を付けたい場合:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

答え4

パーセントで

を使用し、bash絶対行番号の代わりにパーセント番号を使用してファイルをクリーンアップします。

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

このコマンドはコピーを作成せずにコンテンツをその場で削除するため、破壊的になる可能性があります。

上記のファイルから行の最初の75%が削除されます。

関連情報