2列のブロック数の不一致を修正する方法

2列のブロック数の不一致を修正する方法

最後の2つの列が一部の行のブロック数と一致しないファイルがあります($33つのブロックがありますが2つのブロックがあります)。$4ファイル全体をどのように回復できますか?ありがとう

私が持っているもの:

162   167   4,92,4    2,19
143   164   2,4       54,32
532   843   6,4,5     43,23,53  

私が望むもの:

143   164   2,4       54,32
532   843   6,4,5     43,23,53                                                                                                                     

答え1

努力する

awk 'split($3,A,",") == split($4,B,",")'

男によるとawk

Split(s, a[, r[, seps] ]) 文字列 s を正規表現 r の配列 a と区切り文字配列 seps に分割し、フィールド数を返します。

  • デフォルトのawkジョブは暗黙的な印刷です。

答え2

3番目と4番目のフィールドで、カンマで区切られた値の数が異なる行をフィルタリングするには、次の手順を実行します。

awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in

このawk関数は、split正規表現の3番目の引数(この場合はカンマ)で指定されたフィールドを分割し、結果フィールドをa2番目の引数(ここ)の配列に格納します。結果の配列を使用する代わりに、split生成された配列項目の数を返す foct を使用します。

この数字(nc3およびnc4)が等しい場合、その行は印刷されます。

答え3

シンプルアッ方法:

awk -F"[[:space:]]+|," '!(NF%2){ print }' file

出力:

143   164   2,4       54,32
532   843   6,4,5     43,23,53

  • !(NF%2)- 偶数の項目を含む行のみを考慮します(スペースを,フィールド区切り文字として扱います)。

関連情報