【发布时间】:2015-01-13 22:13:58
【问题描述】:
我有几个包含 8 列和 120,000 行的大型数据文件。现在我想从第 100 行开始每 200 行保留 1 行。我的脚本文件 thin.sh 为:
awk '(NR%200==100)' original_file > thinned_file
但是,现在我有 30 个原始文件,这意味着我必须一点一点地修改命令 30 次,并且原始文件的名称相似:
data.0000.dat, data.0001.dat data.0002.dat, ..., data.0029.dat
我想必须有某种方法可以将awk 命令嵌入到循环中以实现我的目标,可能类似于:
for(i=0;i<30;i++);
do
awk '(NR%200==100)' data.$i.dat > data.$i_thinned.dat
done
但我意识到文件名中$i 前面有两个数字00。我可以使用sprintf("%s") 什么的吗?如果是这样,如何安排awk和sprinf的顺序?
我使用 ubuntu 和 bash。
【问题讨论】:
-
只需将所有文件名放在
awk之后,或者让您的shell 为您完成awk '{...}' *.dat您可能需要将NR更改为FNR