パターンが一度だけ表示されるファイルから行を削除します。

パターンが一度だけ表示されるファイルから行を削除します。

CSVファイルがあります。最初のフィールドの識別子に従ってソートされます。最初のフィールドの識別子は、フィールドの1行または2行に表示できます。識別子が一度だけ表示されるファイルのすべての行を削除したいと思います。

たとえば、ファイルには次のものが含まれます。

Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...

この場合、Id1が一度だけ表示されるので、最初の行を削除したいと思います。

ベストアンサー1

試してみてください:

 awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}'

IDが最初に見つかった場合は、次の場所に保存されます。ID連想配列、行全体が格納されます。ワイヤー連想配列ですが印刷されません。

id が複数回見つかると、保存された行が印刷され、各追加行も印刷されます。

テストを受ける:

$ cat data.csv
Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...

$  awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}' data.csv
Id2,x21,x22...
Id2,x23,x24...

おすすめ記事