2番目の列に4文字以上含まれているCSVファイルの行をすべて削除するにはどうすればよいですか?例:CSVファイルの2番目の列に4つ以上の文字を含む行をすべて削除するにはどうすればよいですか?
cave,ape,1
tree,monkey,2
2行目に2文字目が3文字以上含まれているため、削除されます。
2番目の列に4文字以上含まれているCSVファイルの行をすべて削除するにはどうすればよいですか?例:CSVファイルの2番目の列に4つ以上の文字を含む行をすべて削除するにはどうすればよいですか?
cave,ape,1
tree,monkey,2
2行目に2文字目が3文字以上含まれているため、削除されます。
あなたは、このコマンドを使用することができます:
-v = remove lines matching
-E = extended regular expression syntax (also -P is perl syntax)
bashのもの:正規表現構文の
> filename = overwrite/create a file and fill it with the standard out
内訳:
grepの構文のgrep -vE "^[^,]+,[^,]{4,}," test.csv > filtered.csv
内訳
"^[^,]+,[^,]{4,},"
^ = beginning of line
[^,] = anything except commas
[^,]+ = 1 or more of anything except commas
, = comma
[^,]{4,} = 4 or more of anything except commas
また、最初の2つの列にデータにコンマが含まれていると、上記は単純化され、機能しないことに注意してください。 (それがエスケープコンマと生のものとの違いを知らない)
+1ですが、最初のフィールドが空の場合は正しく動作しません。 – Sorpigal
誰もが、まだsed
答えを与えていないので、ここにある:
sed -e '/^[^,]*,[^,]\{4\}/d' animal.csv
そして、ここではいくつかのテストデータです。テストへ
>animal.csv cat <<'.'
cave,ape,0
,cat,1
,orangutan,2
large,wolf,3
,dog,4,happy
tree,monkey,5,sad
.
そして今:
sed -i'' -e '/^[^,]*,[^,]\{4\}/d' animal.csv
cat animal.csv
のみ猿、猫と犬が出力に表示されます。
これは、お客様のデータタイプのフィルタスクリプトです。あなたのデータはutf8であるとみなします
#!/bin/bash
function px {
local a="[email protected]"
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=''
st=0
while read line
do
if [ "$st" -eq 1 ] ; then
cnt=$(($cnt+1))
fi
if [ "$line" == "002c" ] ; then
st=$(($st+1))
fi
if [ "$line" == "000a" ]
then
out=$out$line
if [[ $cnt -le 3+1 ]] ; then
px $out
fi
cnt=0
out=''
st=0
else
out=$out$line
fi
done
fi | iconv -f UTF16 -t UTF8
データはユニコードですか? – pizza
はい、データはUnicodeです。それは様々な言語のシンボルを持っています。 – Village
これらのユーティリティのほとんどがunicode(grep、sed。....など)をサポートしていないので、あなたの要件に指定する必要があります。それらはシングルバイト文字セットのみを実行します。 – pizza