2番目と3番目のファイルのヘッダーを除外して、3つのファイルを1つのマスターファイルにマージします


8

以下に示すように、n行の3つのファイルがあります

sample1.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
.
.
.

Sample2.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
.
.
.

Sample3.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick
.
.
.

以下に示すように、Sample2.txtとSample3.txtのヘッダー(最初の3行)を除外して、これら3つのファイルを1つのファイル(Master.txt)にマージする必要があります。

望ましい出力

$cat Master.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick

注:Ksh 88を備えたAIXマシンの場合


4
これはおそらくプログラムで行うのが最善です。おそらくPythonとPerlを使用しています。このようなことを頻繁に行う場合は、Rの使用を検討してください。Rを使用すると、個々のファイルをデータフレームとしてインポートして、データフレームをマージできます。たとえば、Pythonのパンダは同様の機能を提供していると思いますが、使用していません。
Faheem Mitha 2013年

@FaheemMitha Perl / Pythonは確かにこれには過剰です。さらに、AIX上のPythonは少し問題があるかもしれません。
peterph 2013年

@peterphええと、多分。しかし、彼がそのような操作を頻繁に行わなければならない場合、Rのアプローチはそれを推奨することはたくさんあります。ただし、AIXでのRの現在の状況はわかりません。ほとんどすべてのヴィンテージのRは、このような種類の操作を実行できるはずです。
Faheem Mitha 2013年

1
@FaheemMithaなぜ地球上でこれにRを勧めますか?OPに必要なのは、最初のファイルを除くすべてのファイルから最上位の3行を削除することです。UNIXの強力なテキストベースのインターフェースを考えると、これは標準ユーティリティで動作します。
peterph 2013年

1
@peterphええと、この特定の操作には必要ありませんが、ポスターはテキストテーブルを操作する必要があるようです。一般的に、Rはそのための優れた方法であり、おそらくより複雑な状況に適しています。UNIXツールを使用する別のアプローチは確かに実現可能です。それが悪い方法であることを私は示唆していません。
Faheem Mitha 2013年

回答:


18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt

@Stephane Chazelas:以前のコメントを後悔しています。ありがとうございます。
Ram

1
@ram は、ファイルのサイズに関係なく、上位3行が除外されるtail -n +4ことを意味します。私は10ラインのファイで試したところです。ここでの「4」を、サンプルに4行あるという事実と混同しないでください。それは基本的に偶然です。
Michael Durrant 2013年

@ram :)完全を期すためにhead、同様のオプションがあります。最後の行を除くすべて-n -Xを印刷します X
peterph 2013年

2
@peterphなく、AIX上ではなく、POSIX仕様で(のみ正数可)
ステファンChazelas

うーん、私の悪い…これはGNU拡張です。
peterph 2013年

7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt

2
+1が少し説明を追加できますか?${}構文は何をしますsedか?
terdon

そうではありません${}が、「{...}最後まで4行で実行」してください。一致する行は削除されますが、最初のヘッダーが過ぎてからです。ただし、tailを使用する方がより一般的で堅牢です。
Alexis 2013年

@terdonは言ったように、{}コマンドのグループ化です。
peterph 2013年

@alexisは、最終的に必要なものによって異なります。利点の1つ(最近はそれほど重要ではありませんが)は、1つのプロセスしか生成しないことです。加えて、あなたはそれを#!/bin/sedインタプリタとして簡単にスクリプトにすることができます。
peterph 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.