CSVファイルから列を削除するコマンドライン注文がありますか?

CSVファイルから列を削除するコマンドライン注文がありますか?

次の内容を含むファイル:

1111,2222,3333,4444
aaaa,bbbb,cccc,dddd

元と同じですが、n番目の列(たとえば、n = 2(または3))が見つからないファイルを取得しようとしています。

1111,2222,4444
aaaa,bbbb,dddd

またはn = 0の場合(または1の場合があります)

2222,3333,4444
bbbb,cccc,dddd

実際のファイルの長さはギガバイトに達し、数万列を含めることができます。

この場合、いつものように、コマンドラインの魔術師がエレガントなソリューションを提供できると考えられます... :-)

実際の場合は、最初の列を2つ削除する必要がありますが、最初の列を順番に2回削除するだけですが、一般化する方が面白いと思いました。

ベストアンサー1

私はこれがGNU coreutilsに固有のものだと思います。

$ cut --complement -f 3 -d, inputfile
1111,2222,4444
aaaa,bbbb,dddd

通常、-fで必須フィールドを指定しますが、--complementを追加すると自然に意味を変えることができます。 「人杀」から:

--complement
    complement the set of selected bytes, characters or fields

1つの注意点:列にカンマが含まれていると、cutがスプレッドシートと同じCSVパーサーではないため、cutoffが発生します。多くのパーサーは、CSVでエスケープされたコンマを処理する方法についてさまざまな考えを持っています。単純なCSVの場合は、コマンドラインでまだcutを使用する方法を使用します。

おすすめ記事