単語を使用したファイルの並べ替え

単語を使用したファイルの並べ替え

次のテキストファイルがあります。

Name1 OpenFin
Name2 Chrome
Name3 OpenFin
Name4 Chrome
Name5 OpenFin
Name6 OpenFin

OpenFinすべての行が最初に出てから、すべての行が来るようにソートしたいと思います。Chrome

これが私が今まで持っているものです:

grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt

答え1

あなたの要求を直接翻訳する:

すべてのストリップを含む行がOpenFin最初に表示され、次にすべてのストリップを含む行が表示されます。Chrome

...何が最初であるかわからないまま:

{ grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; } > test.txt

また、元のファイルに表示された順序で行を維持します(行全体がsort整列するのを防ぐためにリングを通過する必要はありません)。

答え2

注文

grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt

Chrome行の任意の場所に文字列を含む行のみが生データから生成されます。これは、パイプラインの右側がパイプラインの最初の結果をまったく処理しないためですgrep(単に削除されました)。

grep読み取るファイル名が与えられると、標準入力ストリームは処理されません。最初の結果は標準入力ストリームに到着しますgrep


sort -k2r LoginExcInternal.txt >test.txt

2番目の列の行が同じ列に含まれる行の後に表示されるようにChromeします。OpenFin上記の方法は、2番目の列の元のデータを辞書の逆順にソートする方法で機能します。

Flagは、ユーティリティに2番目の列のデータを逆順()でソートするように-k2r指示しますsort(または3つ以上の列がある場合はソートを続けます)r。 2行の2番目の列に同じ値がある場合、行全体がソートキーとして使用されます。

~と一致する他の人2 番目の列の値は残りの行と並べ替えられ、出力にも含まれます。


データの元の順序に興味があり、それを変更したくなく、2番目の列にこれら2つの値を含む行のみを抽出したいと仮定した場合(他の値を除く)、2つのステップを実行してください。 :

awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome'  '$2 == value' LoginExcInternal.txt >>test.txt

awkこれは、変数の値が異なる元のデータに同じコードを2回適用しますvalue。このコードは、2番目の列でのみ文字列比較を実行し、指定された値を持つ行を印刷します。スクリプトの最初の実行は値をawk実行し、2番目の実行はその値に行を追加します。OpenFinChrome

これは関連を避ける最初データ比較列Chromeの場合、最初の列の値のいずれか、またはそれが問題になりますOpenFin。また、awkコードは文字列比較を使用するため、2番目の列に次の文字列のいずれかを含めることができる行が出力されるのを防ぎます。サブストリング

答え3

これは、ユーザー「emirn」が回答した後に何らかの理由で削除されました。しかし、彼らの反応は非常に効果的でした。

次の2つのコマンドを実行するように指示されました。

cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt

ありがとう、エミル!

関連情報