
多数のエントリを含む一連の txt ファイルがあります。通常は cat を使用してすべての txt ファイルを 1 つの出力ファイルに結合しますが、元の txt ファイルがどのファイルからのものなのかわからないため、少し面倒になります。
コマンドラインを使用して、まずすべての txt ファイルをアルファベット順に結合し、同時に元のエントリにサフィックスを追加して、そのエントリがどのファイルから来たのかを示す方法があるかどうか知りたいです。
たとえば、それぞれ 3 つのエントリを持つ 2 つの txt ファイルがあるとします。
ファイル_1:
Alpha
Bravo
Charlie
ファイル_2:
Alpha
Bravo
Delta
私がやりたいことはこれです:
- 2 つのリストをアルファベット順にソートされた 1 つの出力 txt ファイルに結合します。
どのリストから来たのかを示す接尾辞を追加します:
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
という名前を付けました。f1
f2
答え2
逆の手順で行う必要があります。まずサフィックスを追加し、次にマージとソートを実行します。
(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort