大きなテキストファイルがあり、そのいくつかは次のとおりです(編集された値)。
JULIANA XXXX006060 LI1033322 THC BRL 730.00
XXXX006296 AA1004737 THC BRL 1,740.00
SANTOS JULIANA XXXX006668 AA1004786 THC BRL 8,150.00
SANTOS JULIANA CABINDA XXXX006697 AA1004777 THC BRL 2,325.00
SANTOS JULIANA XXXX006699 AA1004790 THC BRL 2,325.00
JULIANA BATA XXXX006141 CCC012946 THC BRL 1,460.00
JULIANA BATA XXXX006153 CCC013054 THC BRL 870.00
JULIANA XXXX006269 CCC013105 THC BRL 870.00
JULIANA XXXX006295 CCC013083 THC BRL 870.00
JULIANA BATA XXXX006305 CCC013043 THC BRL 1,460.00
私はいつもで始まる文字列をcut
つかみたいのですが、同じフィールド番号にはありません。awk
XXXX00
シェルスクリプトでこれをどのように実行できますか?
答え1
ただgrep
それのために:
grep -oE 'XXXX00[0-9]*' file
-o
:一致する部分だけを印刷します。-E
:拡張正規表現を有効にします。[0-9]*
:検索したい文字列の後には数字しか表示されません。
答え2
右から5番目のフィールドが欲しいようです。
awk '{print $(NF-4)}' file
答え3
grep
PCREで使用:
% grep -Po '(^|\s)\KXXXX00[^\s]*(?=(\s|$))' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
この場合(単語)なしで行うことができます-w
。単語を構成する文字は、次のように処理されます[[:alnum:]_]
。
% grep -wo 'XXXX00[^ ]*' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
答え4
sed 's/[^0]* *\([^ ]*\).*/\1/' <in >out
人のリストがあり、名前の数が異なるため、フィールドの数が異なるようです。ただし、そのうちの0を含む名前がない可能性があるため、1を含む最初のスペースで区切られた文字列を完全に切り取り、保存してから、それ以降のすべての項目を切り取ります。