1

file.txt非常に長い行を含むファイルがあります。

1|34|2012.12.01 00:08:35|12|4|921-*203-0000000000-962797807950|mar0101|0|00000106829DAE7F3FAB187550B920530C00|0|0|4000018001000002||962797807950|||||-1|||||-1||-1|0||||0||||||-1|-1|||-1|0|-1|-1|-1|2012.12.01 00:08:35|1|0||-1|1|||||||||||||0|0|||472|0|12|-2147483648|-2147483648|-2147483648|-2147483648|||||||||||||||||||||||||0|||0||1|6|252|tid{111211344662580792}pfid{10}gob{1}rid{globitel} afid{}uid1{962797807950}aid1{1}ar1{100}uid2{globitel}aid2{-1}pid{1234}pur{!GDRC RESERVE AMOUNT 10000}ratinf{}rec{0}rots{0}tda{}mid{}exd{0}reqa{100}ctr{StaffLine}ftksn{JMT}ftksr{0001}ftktp{PayCall Ticket}||

このファイルの「ctr」の後の単語「StaffLine」のみを印刷したいのですが、この単語の文字数はわかりません。

私はもう試した:

awk '{comp[substr("ctr",0)]{print}}'

しかし、それは機能しませんでした。どうすればその言葉を手に入れることができますか?

4

4 に答える 4

2

を使用する 1 つの方法を次に示しawkます。

awk -F "[{}]" '{ for(i=1;i<=NF;i++) if ($i == "ctr") print $(i+1) }' file

または、お使いの のバージョンがgrepPerl のような正規表現をサポートしている場合:

grep -oP "(?<=ctr{)[^}]+" file

結果:

StaffLine
于 2012-12-27T07:34:56.570 に答える
1

sed の使用:

sed 's/.*}ctr{\([^}]*\).*/\1/' input
于 2012-12-27T07:43:46.137 に答える
1

それに対処する1つの方法は次のsedとおりです。

sed -e 's/.*}ctr{//; s/}.*//' file.txt

{これにより、単語の後ろまでのすべてが削除されます(架空のエントリなど、接尾辞として含まれるctr単語の問題を回避します)。次に、サンプル データだけを残して、最初に残ったものからすべてを削除します。ctrpxctr{Bogus}}StaffLine

于 2012-12-27T07:45:38.133 に答える
0
perl -lne '$_=m/.*ctr{([^}]*)}.*/;print $1' your_file

以下でテスト:

> cat temp
1|34|2012.12.01 00:08:35|12|4|921-*203-0000000000-962797807950|mar0101|0|00000106829DAE7F3FAB187550B920530C00|0|0|4000018001000002||962797807950|||||-1|||||-1||-1|0||||0||||||-1|-1|||-1|0|-1|-1|-1|2012.12.01 00:08:35|1|0||-1|1|||||||||||||0|0|||472|0|12|-2147483648|-2147483648|-2147483648|-2147483648|||||||||||||||||||||||||0|||0||1|6|252|tid{111211344662580792}pfid{10}gob{1}rid{globitel} afid{}uid1{962797807950}aid1{1}ar1{100}uid2{globitel}aid2{-1}pid{1234}pur{!GDRC RESERVE AMOUNT 10000}ratinf{}rec{0}rots{0}tda{}mid{}exd{0}reqa{100}ctr{StaffLine}ftksn{JMT}ftksr{0001}ftktp{PayCall Ticket}||
> perl -lne '$_=m/.*ctr{([^}]*)}.*/;print $1' temp
StaffLine
> 
于 2012-12-27T09:03:31.363 に答える