1

コマンドに 2 つの関数を組み込もうとしていawkます。列 2 の Col1 の情報が必要ですtolower(したがって、Col1 の情報は、Col1 と Col2 の 2 つの列の値になり、Col1 と Col2 の値がCol2 に含まれます)、 1-Nから始まり、次で終わるlower数を数えたいと思います。私が持っている特定のマーカーの開始。

現在、データ (タブ区切り) は次のようになっています。

<s>
He  PRP -
could   MD  -
tell    VB  -
she PRP -
was VBD -
teasing VBG -
him PRP -
.   .   .
</s>
<s>
He  PRP -
kept    VBD -
his PRP$    -
eyes    NNS -
closed  VBD -
,   ,   -
but CC  -
he  PRP -
could   MD  -
feel    VB  -
himself PRP -
smiling VBG -
.   .   .
</s>

理想的な出力は次のようになります。

<s>
He  he  PRP 1
could   could   MD  2
tell    tell    VB  3
she     she PRP 4
was was VBD     5
teasing teasing VBG 6
him him PRP 7
.   .   .   8
</s>
<s>
He  he  PRP 1-
kept    kept    VBD 2
his his PRP$    3
eyes    eyes    NNS 4
closed  closed  VBD 5
,   ,   ,   6
but but CC  7
he  he  PRP 8
could   could   MD  9
feel    feel    VB  10
himself     himself PRP 11
smiling smiling VBG 12
.   .   .   13
</s>

awk私が試しているがうまくいかない2つのステップはこれです:

ステップ1:

awk '!NF{$0=x}1' input | awk '{$1=$1; print "<s>\n" $0 "\t.\n</s>"}' RS=  FS='\n' OFS='\t-\n' > output

ここで、「-」をカウンターにする方法がわかりません

およびステップ2(直接エラーが発生します):

awk '{print $1 "\t" '$1 = tolower($1)' "\t" $2 "\t" $3}' input > output

1. 下限とカウンターを解決する方法と 2. これらの 2 つの手順を組み合わせることが可能かどうかについての提案はありますか?

前もって感謝します

4

1 に答える 1

3

私は次のようなことをします:

$ awk 'BEGIN{FS=OFS="\t"} NF>1{$1=$1 FS tolower($1); $4=++f} NF==1{f=0}1' file
<s>
He he PRP - 1
could could MD - 2
tell tell VB - 3
she she PRP - 4
was was VBD - 5
teasing teasing VBG - 6
him him PRP - 7
. . . . 8
</s>
<s>
He he PRP - 1
kept kept VBD - 2
his his PRP$ - 3
eyes eyes NNS - 4
closed closed VBD - 5
, , , - 6
but but CC - 7
he he PRP - 8
could could MD - 9
feel feel VB - 10
himself himself PRP - 11
smiling smiling VBG - 12
. . . . 13
</s>

つまり、行を設定$1$4<s>、それ以外の場合はカウンターをリセットします(はい、2回リセットされることは知っていますが、今はもっときちんとしたものを考えることはできません)。あと1は普通に印刷。

printと区切り記号をよく使っていることに注意してください。フィールドを変更printし、True 条件 ( 1) で指定されたフィールド セパレータを使用して自動的に実行することをお勧めします。一種のモデル ビュー コントローラー : )

于 2015-10-30T11:32:53.870 に答える