CSVで100列ごとに切り取り

CSVで100列ごとに切り取り

以下のようにタブ区切りの数値データファイルがあります。

1 2 3 4
2 4 6 8

私の実際のファイルの幅は50000列で、100列目(100列目、200列目、300列目、400列目...)のみが必要です。今、他のすべての列を削除したいと思います。

どうすればいいですか?

答え1

awk目的は次のとおりです。

awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output

または、フィールドにスペースがある場合は、タブをフィールド区切り文字として指定します。

awk -F'\t' '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output

あるいは、Perlを使用することもできます。

perl -ane 'for($i=99;$i<=$#F;$i+=100){print "$F[$i] "}' file > output

複数のファイルに対してこれを行うには、シェルループを使用できます(現在のディレクトリ内のすべてのファイルに対してこのループを実行していると仮定します)。

for f in *; do
  awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' "$f" > "$f".new;
done

答え2

大容量ファイルに適しているかどうかはわかりませんが、次のようにできますcut

cut -d " " -f -100 < [your file]

関連情報