最初の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%が削除されます。