6

file1 と file2 の 2 つのファイルがあります。

file1 の内容は

Hello
  how
are you
when can i meet you
film??

file2 の内容は

Hello 
how 
are you
darling
when can i meet you

のような2つのファイルを組み合わせたファイルを生成したい

Hello
how
are you
darling
when can i meet you
film??

注: の 2 行目のスペースはfile1、最終ファイルでは無視する必要があります。C または Linux には、上記の次のジョブを実行するための組み込み関数がありますか、またはこれを実行するスクリプトを作成できますか?

4

3 に答える 3

4

簡単な仕事awk:

$ awk '{$1=$1}!u[$0]++' file2 file1
Hello
how
are you
darling
when can i meet you
film??

または、出力の順序を気にしない場合:

$ sed 's/^\s*//' file1 file2 | sort -u 
are you
darling
film??
Hello
how
when can i meet you
于 2013-01-09T11:01:55.117 に答える
1

を使用する 1 つの方法を次に示しawkます。

awk '{ gsub(/^[ \t]+|[ \t]+$/,"") } !a[$0]++' file2 file1

結果:

Hello
how
are you
darling
when can i meet you
film??

編集:

問題:

awk '{ $1=$1 } !a[$0]++' file2 file1

この単純な例ではうまく機能しますが、先頭と末尾の空白を削除するだけでなく、フィールド間の余分な空白も削除するため、同様の行を同じものとして扱います。たとえば、以下がfile1含まれている場合:

Hello
  how
are you
when  can i meet you
film??

両方:

when can i meet you

と:

when  can i meet you

行は同じものとして扱われます。これは望ましい結果かもしれませんが、あなたの質問に基づいて、最初のコマンドに従って前後の空白を単純に削除するのが最善だと思います。HTH。

于 2013-01-09T12:08:42.960 に答える
0

いくつかの標準フィルターを適用できます。

cat file1 file2 | perl -pe 's/^\s+//' | sort | uniq
  • cat必要なすべてのファイルを連結するために使用されます。
  • perl最初のホワイト スペースをすべて削除するためです。
  • sortすべての行をソートし、
  • 重複行をuniq削除します。
于 2013-01-09T11:04:36.687 に答える