以下のようにタブ区切りの数値データファイルがあります。
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]