単語をファイルの行番号と場所番号に置き換える必要があります

単語をファイルの行番号と場所番号に置き換える必要があります

単語をファイルの行と場所の番号に置き換える必要があります。

ファイル 1 には以下が含まれます。

ABC XYZ UIO WER GFH
DFG JHKS
WEQ RWT DSW
ANSN WERER WERT QAZX UWRE AA

その内容を次のように交換する必要があります。

S_11 S_12 S_13 S_14 S_15
S_21 S_22
S_31 S_32 S_33
S_41 S_42 S_43 S_44 S_45 S_46

その言葉は再び繰り返されません。各ファイルには異なるセットと単語数があります。

ベストアンサー1

perl- に基づく別の方法:

perl -pe 'my $i; s{\S+}{"S_$." . ++$i}ge'

S_<line-number><word-number>これは、既存の空白を維持しながら、各行のASCIIではなく空白文字のすべてのシーケンスを置き換えます。

入力にASCII以外の空白文字を含めることができる場合は、次のようになります。

U+0085 次行
U+00A0 改行なしの空白
U+1680 OGHAM 空白表示
U+2000 EN QUAD
U+2001 EM QUAD
U+2002 EN 空白
U+2003 EM 空白
U+2004 空白 3 個ごとに
U+2005 空白 はい犬
U +2006六つのスペース
U + 2007
数字スペースU + 2008句読点スペース
U + 2009細いスペース
U + 200A髪の毛スペース
U + 2028行区切り文字
U + 2029段落区切り文字
U + 202F改行なしの狭いスペース
U + 205F中級数
U+ 3000表の文字スペース

ユーザーのロケールに従ってエンコードされ、その-Mopen=localeオプションを追加できます。

「改行しない」スペース(上記のU + 00A0、U + 2007、およびU + 202F)は区切り文字と見なすべきではないので、除外することも除外しないこともあります。perlPCRE(含む(*UCP))にはこれが含まれますが、GNUロケール[:space:] CTYPEカテゴリには含まれていません。私のシステムでは、U + 0085がロケールに含まれておらず、[:space:]PCREにもU + 180Eモンゴル語コレクションの区切り記号(ここ)が含まれていることがわかりました。Unicodeでは空白として分類されていますが、もはや分類されません。)。キャラクターperlも見てください\PZいいえ(大文字p)区切り文字と\P{Zs}文字に分類いいえスペース区切り文字に分類されます(TABを含む制御文字は区切り文字とは見なされません)。私はこれが\p{Zs}それ自体のサブセットであることがわかりました。\pZはい。サブセットです。\s

おすすめ記事