指定された数を超える文字を含むファイル内のすべての行を削除するにはどうすればよいですか?例えば
bear
rabbit
tree
elephant
5文字以下の単語に制限すると、出力は次のようになります。
bear
tree
- ファイルにはさまざまな外国文字が含まれており、それぞれが1文字としてカウントされます。
- 句読点記号も1文字として数えることができます。
指定された数を超える文字を含むファイル内のすべての行を削除するにはどうすればよいですか?例えば
bear
rabbit
tree
elephant
5文字以下の単語に制限すると、出力は次のようになります。
bear
tree
$ awk 'length<=5' input.txt
bear
tree
以下はトリックを行います:
sed -i '/^.\{5,\}$/d' FILE
これが意味することは次のとおりです。
次のパターンに一致するすべての行を削除 ( / [...] /d
) インプレース ( switch) します。-i
^
).
) 5 回以上繰り返される ( \{5,\}
)$
その後に行末 ( )が続きますという名前のファイルからFILE
。
grep -v '......' myfile.txt
は 5 文字以下の行を配信します。
これは、6 文字以上を含む行を「選択」してから、 でアクションを逆にして、一致しない-v
行のみを出力することによって行われます。
「ファイルにはさまざまな外国語の文字が含まれています。これらはそれぞれ 1 文字としてカウントされます。」入力データが UTF8 であると仮定すると、この bash フィルター スクリプトで実行できます。
#!/bin/bash
function px {
local a="$@"
local i=0
while [ $i -lt ${#a} ]
do
printf \\x${a:$i:2}
i=$(($i+2))
done
}
(iconv -f UTF8 -t UTF16 | od -x | cut -b 9- | xargs -n 1) |
if read utf16header
then
px $utf16header
cnt=0
out=''
while read line
do
cnt=$(($cnt+1))
if [ "$line" == "000a" ]
then
if [[ $cnt -le 5+1 ]] ; then
out=$out$line
px $out
fi
cnt=0
out=''
else
out=$out$line
fi
done
fi | iconv -f UTF16 -t UTF8