シェルコマンドを使用してasciiファイルの最初のn行を削除するにはどうすればよいですか?


93

最初の5〜10行にASCIIテキスト情報を含む複数のファイルがあり、その後に適切に表にされたマトリックス情報が続きます。シェルスクリプトでは、これらの最初の数行のテキストを削除して、純粋なマトリックス情報を別のプログラムで使用できるようにします。これを行うにはbashシェルコマンドをどのように使用できますか?

助けがあれば、RedHatとUbuntu Linuxシステムを使用しています。

回答:


144

ファイルがシンボリックリンクまたはハードリンクでない限り、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

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

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

1
ありがとう@ YanickGirouard、@ IgnacioVazquezAbrams!お二人は私の研究で多くの肉体労働を節約してくれました!:)
ポール

2
特に@Svetlana sed -i。ほとんどの実装では、ファイルを削除して新しいファイルに置き換えますが、元のファイルを別の場所に残してしまうため、リンクでは機能しません。
jw013 14年

6
「1,3d」、+ 4などを説明するのはどうですか。手段?質問はn行に対するものでしたが、nが何であるかはわかりませんでした(nを変更するために何を変更するかは不明ですが、例ではnは2です)
ロビンマノーリ

3
これは一時ファイルを使用するため、100%の使用ディスク領域にはあまり役立ちません。これを文字通り「インプレース」で行うソリューションがあると興味深いでしょう。
シャイ

10

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

これにより、file.txtから最初の3行が削除されます。


6

表形式の行がタブ文字を含むものである場合:

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

+1110行を削除することに注意してください。これ+11は、「11行目から」という意味であり、1行目から末尾に番号を付けます)または

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

3
「タブ付き」とは、通常、「タブ文字でインデントされた」ではなく、「表にきれいに印刷された」ことを意味します。
イグナシオバスケス-エイブラムス

@ IgnacioVazquez-Abrams私は知っています。きれいに印刷されたテーブルでは、タブ文字を使用することがあります。これは、列を揃えるよりも見つけやすいです。もちろん、Paulがサンプルの入力を行った場合、より良いマッチャーを提供できます。
ジル

2

ExモードでVimを使用できます。

ex -sc '1d5|x' file
  1. 1 最初の行に移動する

  2. 5 5行を選択

  3. d 削除する

  4. x 保存して閉じます


0

echo "a \ nb" | sed '1d'#最初の行を削除

cat list.txt | sed '1d'> list.csv#list.txtを読み取り、list.csvを最初の行なしで書き込みます

その他の便利なコマンド:

grep '^ |' #最初の文字を検索(パイプ|)

sed 's / | // g'#パイプを削除

sed 's / // g'#スペースを削除


0

割合で

を使用してbash、行の絶対数ではなくパーセント値を使用してファイルをクリーンアップします。

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

このコマンドは、コピーを作成せずにコンテンツをその場で削除するため、破壊的である可能性があるため注意してください。

上記のファイルから行の最初の75%を削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.