複数のファイルを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
head
、tail
および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