テキストファイルには、次の形式のビッグデータがあります。
x, xx, xxx, xxxx, , , ,
x, xx, , xxxx, xxxx,
だから、ファイルからカンマの後のフィールド番号3が空のすべての行を削除したいと思います。
結果は次のとおりです。
x, xx, xxx, xxxx, , , ,
だから何をしますか?
答え1
GNUの使用awk
:
$ awk -F' *, *' '$3' file
x, xx, xxx, xxxx, , , ,
-F
フィールド区切り文字を正規表現␣*,␣*
(スペース、アスタリスク、コンマ、スペース、アスタリスク)に設定しました。この式は、ゼロ個以上のスペースで囲まれたコンマと一致します。
実際のawk
スクリプトは、$3
3番目のフィールドが空でない場合、その行が印刷されることを意味します。
答え2
アッ解決策:
awk -F, '$3!~/^[[:space:]]*$/' file
出力:
x, xx, xxx, xxxx, , , ,
-F,
- フィールド区切り記号$3!~/^[[:space:]]*$/
- 持っている人だけを考慮してください。空ではない3番目のフィールド(スペースなし)
答え3
真珠
perl -ne 'print if /^([^,]*,){2}\h*[^\h,]/' yourcsvfile
最初の 2 つの csv フィールドを見て、2 番目のフィールドの終わりと 3 番目のフィールドの先頭に、少なくとも水平でない空白、カンマ以外のエントリがあることを確認します。一致すればラインが見つかりました。
perl -F, -lane 'print if $F[2] =~ /\S/' yourcsvfile
行をコンマ区切りのフィールドに分割して配列に保存し、3番目のフィールドを見つけて、空白以外の@F
フィールド$F[2]
が少なくとも1つあることを確認します\S
。
横
sed -e '
s/,/\n/2;s/,/\n/2
/\n[[:space:]]*\n/d
y/\n/,/
' yourfile.csv
3番目のフィールドを改行文字で表示します。その後、2つのタグの間にスペースがある場合、または何もない場合は、=>行が削除されます。 OTWはsed
デフォルトでマーキングと印刷パターンスペースを復元します。