我有一个由制表符分隔的数字数据文件,如下所示
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]