CLI からソート順とルートを指定してテキストファイルを変換する

CLI からソート順とルートを指定してテキストファイルを変換する

多数のエントリを含む一連の txt ファイルがあります。通常は cat を使用してすべての txt ファイルを 1 つの出力ファイルに結合しますが、元の txt ファイルがどのファイルからのものなのかわからないため、少し面倒になります。

コマンドラインを使用して、まずすべての txt ファイルをアルファベット順に結合し、同時に元のエントリにサフィックスを追加して、そのエントリがどのファイルから来たのかを示す方法があるかどうか知りたいです。

たとえば、それぞれ 3 つのエントリを持つ 2 つの txt ファイルがあるとします。

ファイル_1:

  Alpha
  Bravo 
  Charlie

ファイル_2:

  Alpha
  Bravo
  Delta

私がやりたいことはこれです:

  1. 2 つのリストをアルファベット順にソートされた 1 つの出力 txt ファイルに結合します。
  2. どのリストから来たのかを示す接尾辞を追加します:

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    

これは可能ですか?

答え1

Florian が言うように、まずファイル名を追加してから並べ替える必要があります。別の方法としては、以下を使用しますawk

$ awk '{printf "%s_%s\n", $0, FILENAME}' f1 f2 | sort
Alpha_f1
Alpha_f2
Bravo_f1
Bravo_f2
Charlie_f1
Delta_f2

printfは、指定された形式で引数を出力します。%s_%s\nつまり、 と で区切られた 2 つの_文字列の後に改行が続きます。$0とには、それぞれ現在の行とファイル名が含まれます。この例では、ファイルに とFILENAMEという名前を付けました。f1f2

答え2

逆の手順で行う必要があります。まずサフィックスを追加し、次にマージとソートを実行します。

(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort 

関連情報