「x」文字より小さいテキストファイルのすべての行を削除する方法は?

「x」文字より小さいテキストファイルのすべての行を削除する方法は?

テキストファイルから文字、数字、または記号が「x」より少ない行をすべて削除するにはどうすればよいですか?awk 'length($0)>'スペースが含まれているため使用できません。

ベストアンサー1

nグラフィック記号未満を含む行を削除するとします。

awk -v n=5 '{ line = $0; gsub("[^[:graph:]]", "") } length >= n { print line }'

一致しないすべての文字が削除されます[[:graph:]]。残りの文字列の長さがより大きいか等しい場合は、n(修正されていない)行を印刷します。

値はnコマンドラインに提供されます。

[[:graph:]]と同じで、[[:alnum:][:punct:]]と同じです[[:alpha:][:digit:][:punct:]]。スペースとほぼ同じ[[:print:]]ですが、スペースと一致しません。

[^[:graph:]]すべてのタブまたはスペースを削除する代わりに、すべてのタブまたはスペースを削除するために使用できます[[:blank:]]

sed上記のコードとほぼ同じです。awk

sed -e 'h; s/[^[:graph:]]//g' \
    -e '/.\{5\}/!d; g'

または単純化するため(空白以外の文字のみを計算)

sed -e 'h; s/[[:blank:]]//g' \
    -e '/...../!d; g'

まず、現在の行を予約済みスペースに保存しますh。次に、その行からグラフィック以外の文字(または2番目のバリアントの場合は空白文字)をすべて削除しますs///g。線に5文字未満が含まれている場合(希望の数に変更するか、2番目のバリエーションでポイント数を変更)、線は削除されます。それ以外の場合は、保存された行が予約済みスペースから取得されg(暗黙的に)印刷されます。

おすすめ記事