この特定のパターンを使用してどのように把握して並べ替えることができますか?

この特定のパターンを使用してどのように把握して並べ替えることができますか?

B *以降の数字を取得したいが含まれていないはいそしてそれ以来。友達から受け取り、次のコマンドを試しましたが、うまくいきません。

grep -oP 'B.\K[\w\s\d]' < tus.txt | sort -u

tus.txt

~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758895*4932764*B*4578873831221*Y*
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21759295*4932379*B*00082403*Y*2708332

望ましい結果:

222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403

答え1

入力は*- で区切られます。 5番目のフィールドを取得します。

$ cut -d '*' -f 5 tus.txt
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403

これはあなたが言及した望ましい出力ですが、ソートについても議論しました。

$ cut -d '*' -f 5 tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
262105589241-20172-31489016
36
4578873831221

何らかの理由でしたい場合オリジナルこのフィールドのデータ(重複はここでは削除されません):

$ sort -t '*' -k5,5 tus.txt
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21759295*4932379*B*00082403*Y*2708332
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758895*4932764*B*4578873831221*Y*

答え2

*あなたのコマンドも動作します。または、以下を追加する必要があります+

$ grep -oP 'B.\K[\w\s\d]+' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

またはより簡単には、次のようになります。

$ grep -oP 'B\*\K[^*]*' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

またはawk、最後に2番目に区切られたフィールドを印刷するには、次のようにします*

$ awk  -F'[*]' '{print $5}' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221

答え3

次の方法を使用します。

grep -Po '(?<=\*B\*)[^*]+' tus.txt | sort -u

出力:

00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241-20172-31489016
36
4578873831221

初期出力はsort -u並べ替えられます。grep

関連情報