ファイルから重複したヘッダー/トレーラーを削除するPerlスクリプト

ファイルから重複したヘッダー/トレーラーを削除するPerlスクリプト

10個のファイルを1つにマージするPerlスクリプトを作成しました。各ファイルには、ファイルにキーワードのタイトル/予告編があります。したがって、マージされたファイルには複数のヘッダーとトレーラーキーワードがあります。ただし、タイトルとトレーラーはマージされたファイルの先頭と末尾にのみ表示されるように要求します。

例:

ファイル1.txt -->

Header
Content1
Trailer

ファイル2.txt -->

Header
Content2
Trailer

Merged.txt(現在) - >

Header
Content1
Trailer
Header
Content2
Trailer

Merged.txt(必須) - >

Header
Content1
Content2
Trailer

ベストアンサー1

私はそれをします:

perl -i -lne 'print unless ($_ eq "Header" && $. > 1) || ($_ eq "Trailer" && !eof)' your-file

これは次の方法で行うこともできますsed

sed -e 1b -e '$b' -e '/^Header$/d' -e '/^Trailer$/d' your-file

一部sedの実装では Perl スタイルの内部編集が可能で、一部 (ほとんど) はこれを使用し、-i一部 (FreeBSD および macos を含む派生製品) は使用します。-i ''

マージ時に追加のヘッダー/トレーラーを削除できます。

perl -lne '
  if (eof) {
    $n++;  # counts files
    close ARGV; # resets $.
    next if @ARGV; # if there are more files to process
  }
  print unless $. == 1 && $n # first list and not first file
  ' file<->.txt(n)

file<->.txt(n)数値でfile<number>.txt並べ替えを一致させるにはn(したがって、file10.txt間で並べ替えるには)、間file9.txtfile11.txtで並べ替えたくない場合はシェルが必要です)file1.txtfile2.txtzsh

またはGNUを使用してsed(まだzsh):

() {
  head -n1 < $1
  sed -s -- '1d;$d' "$@"
  tail -n1 < $argv[-1]
} file<->.txt(n)

おすすめ記事