从 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

要对多个文件执行此操作,您可以使用 shell 循环(假设您要对当前目录中的所有文件运行此循环):

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]

相关内容