複数のファイルをマージする sed コマンド

複数のファイルをマージする sed コマンド

複数のファイルを1つのファイルにマージし、最初のファイルヘッダーと最後のファイルフッターを除くすべてのファイルのヘッダーとフッターを削除したいと思います。

たとえば、10個のファイルがあります。

ファイル1

Name
A
B
C
Next date

ファイル2

Name
D
E
F
Next date

...

文書10

Name
X
Y
Next date

次の出力が必要です。

Name
A
B
C
D
E
F
...
X
Y
Next date

コマンドに従って何をすべきですかsed

ベストアンサー1

headtailおよびsed:を使用してください。

set -- File*

{
    head -n 1 "$1"
    for file do
        sed '1d;$d' "$file"
    done
    tail -n 1 "$file"
} >outfile

これは、すべての関連ファイルの名前が一致すると仮定しますFile*(またはそれを一致させるためにコマンドが使用するすべてのパターンset)。

このsetコマンドは、位置引数(例:など)を使用するファイル名$1に設定します。$2これらの内容はリストにもあります$@

コマンドは、head最初のファイルからヘッダーを抽出することから始まります。

ループ内の次のコマンドsed(一致するすべてのファイルを繰り返すFile*)は、各ファイルの最初の行と最後の行を除いて各ファイルの内容を出力します。このsed式は1d入力の最初の行を削除し、$d最後の行を削除します。

最後に、tail最後のファイルのフッターを出力します。

すべての出力は名前付きディレクトリにリダイレクトされますoutfile

それぞれ1行のヘッダーとフッターを含む4つのファイルを使用してテストされました。

$ cat File*
FIRST HEADER
1
2
3
FOOTER
HEADER
1
2
3
FOOTER
HEADER
1
2
3
FOOTER
HEADER
1
2
3
LAST FOOTER

上記のコマンドを実行してください。その後、

$ cat outfile
FIRST HEADER
1
2
3
1
2
3
1
2
3
1
2
3
LAST FOOTER

おすすめ記事