【发布时间】:2013-11-26 17:29:32
【问题描述】:
Awk 可以处理的数据量是否有限制?
for i in "052" "064" "060" "070" "074" "076" "178"
do
awk -v f="${i}" -F, 'match ($1,f) { print $2","$3 }' uls.csv > ul$i.csv
awk -v f="${i}" -F, 'match ($1,f) { print $2","$3 }' dls.csv > dl$i.csv
awk -v n="${i}" -F, 'match ($1,n) { print $2","$3 }' dlsur.csv >> dlu$i.csv
awk -v k="${i}" -F, 'match ($1,k) { print $2","$3 }' dailyd.csv >> dla$i.csv
awk -v m="${i}" -F, 'match ($1,m) { print $2","$3 }' dailyu.csv >> ula$i.csv
done
当我运行那段代码时,它基本上从 csv 文件中提取数据并创建新文件。 那段代码完美运行。 但是当我添加一个额外的文件(在 for 循环中)时,例如“180”,它将创建该文件,但也会包含来自其他文件的几行数据。我检查了很多次代码。我什至在原始数据进入这个循环之前检查了它,它都是正确的。这似乎是 awk 中的一个小故障。 我是否需要应用等待功能才能赶上?
【问题讨论】:
-
你的正则表达式很笼统;你确定它没有匹配比预期更多的行吗?
-
不是。每一行都有一个唯一的 id,这也是文件名的一部分,所以 052 和 064 都是 id。
-
但是字符串会出现在该行的其他位置吗?
$0是整行,而不是第一个字段。也许你想要match($1, f)。 -
当我在循环后打开文件时,它显示新文件的id,但新id和另一个id的数据。
-
文件是否最初来自 Windows 的 PC?当我将文件从 windows 导入到 linux 上进行 awking 时,我通常需要 vi 和
:set ff=unix和:set nobomb让它们按预期运行。