しきい値より短いすべての行に文字列を追加します。

しきい値より短いすべての行に文字列を追加します。

@私は大きなファイルを持っていて、特定のしきい値より短い各行の前に文字を追加したいと思います。

たとえば、次のファイルがあるとします。

dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

長さが10文字以下のすべての行を修正したいと思います。その後、出力は次のようになります。

@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

答え1

しきい値が「10文字以下」であると仮定すると、使用できます。

sed '/^.\{1,10\}$/s/^/@/' input.txt 

これは、アドレス指定子を使用して/^.\{1,10\}$/1〜10文字を含む行のみを処理し、「行の開始」をに「置き換えます」@

または@terdonが指摘したように:

sed 's/^\{1,10\}$/@&/' input.txt

これにより、1〜10文字を含むすべての行がに変わり、@その後に「それ自体」( &)。このアプローチには処理する正規表現のみが含まれているため、おそらく(少し)速くなります。

以下も使用できますawk

awk 'length($0)<=10 {printf "@"}1' input.txt 

これにより、ほとんどの行がそのまま印刷されますが、10文字以下の行では@最初に印刷されます。

答え2

あなたはそれを使用することができますsed

# the threshold is the '5'
$ sed '/^.\{1,5\}$/s/^/@/' file
@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

答え3

使用アッ実行できるユーティリティは次のとおりです。

awk '/.{10}./||($0="@"$0)' file

ストリームエディタsed同じことができます。

sed -e '
  s/./&/11;t
  s/^/@/
' file
  • プレフィックスをトリガーするしきい値は10文字以下です。

関連情報