1

私は unix を初めて使用し、次のことを実行できるようにしたいと考えていますが、方法がわかりません。

次のような行を含むテキスト ファイルを取得します。

TR=P567;dir=o;day=su;TI=12:10;stn=westborough;Line=worcester
TR=P567;dir=o;day=su;TI=12:10;stn=westborough;Line=lowell
TR=P567;dir=o;day=su;TI=12:10;stn=westborough;Line=worcester
TR=P234;dir=o;day=su;TI=12:10;stn=westborough;Line=lowell
TR=P234;dir=o;day=su;TI=12:10;stn=westborough;Line=lowell
TR=P234;dir=o;day=su;TI=12:10;stn=westborough;Line=worcester

そしてこれを出力します:

TR=P567;dir=o;day=su;TI=12:10;stn=westborough;Line=worcester
TR=P567;dir=o;day=su;TI=12:10;stn=westborough;Line=lowell
TR=P234;dir=o;day=su;TI=12:10;stn=westborough;Line=lowell
TR=P234;dir=o;day=su;TI=12:10;stn=westborough;Line=worcester

スクリプトが、一意の Line 値を持つ各 TR 値のすべての行を検索できるようにしたいと考えています。

ありがとう

4

1 に答える 1

4

dirdayTI、およびの値をランダムに選択しても問題ないように見えるので、次のstnように記述できます。

sort -u -t ';' -k 1,1 -k 6,6 -s < input_file > output_file

説明:

  • sortテキスト ファイルの行を並べ替える」ユーティリティを使用すると、ファイルの行を並べ替え/比較/マージできます。( GNU Coreutils のドキュメントを参照してください。)
  • -uor--uniqueオプション「等しい実行の最初のみを出力する」は、2sortつの入力行が等しい場合、そのうちの 1 つだけが必要であることを示します。
  • -k POS[,POS2]orオプション「--key=POS1[,POS2]キーを POS1 (原点 1) で開始し、POS2 (デフォルトの行末) で終了sort」は、ソートしたい「キー」の場所を示します。この場合、-k 1,1は 1 つのキーが最初のフィールド (フィールドからフィールド1まで1) で構成されることを-k 6,6意味し、1 つのキーが 6 番目のフィールド (フィールドからフィールド6まで6) で構成されることを意味します。
  • -t SEPor--field-separator=SEPオプションは、フィールドを分離してカウントするために (私たちの場合は)sort使用したいことを示しています。(そうしないと、フィールドが空白で区切られていると見なされ、この場合、行全体が 1 つのフィールドとして扱われます。)SEP';'
  • -sorオプションの--stabilize「最終手段の比較を無効にしてソートを安定化する」は、指定した方法sortのみ行を比較したいことを示しています。2 つの行が上記で定義された同じ「キー」を持つ場合、他の点が異なっていても、それらは同等と見なされます。を使用しているため-u、これはそのうちの 1 つが破棄されることを意味します。( を使用していない場合は、が相互に並べ替えないことを-u意味します。)sort
于 2012-09-22T18:37:18.100 に答える