我只需要在目录中保留最近的4个文件。我使用了以下命令:
for i in range(len(names)):
names[i] =[names[i]]*len(links[i])
那是有效的。我想使用变量NUM_TO_KEEP而不是'4',所以我尝试了以下内容:
rm -f `ls -t $SOMEDIR/archive/* | awk 'NR>4'`
我收到以下错误: awk:第1行附近的语法错误 awk:在第1行附近拯救
我也试了一个简单的 ls | awk -v var =“foo”'NR> 4'
我得到同样的错误。 我在linux和solaris上尝试这个,并为两个操作系统获得相同的错误。 关于我做错了什么的任何想法?我的问题是关于我在使用'-v'选项时遇到的错误,只要在-v选项旁边设置变量,我就会收到错误。 (ls | awk -v'NR> 4'有效,ls | awk -v =“foo”'NR> 4'给出错误)
答案 0 :(得分:3)
虽然这被称为dup,而其他类似问题确实解决了部分问题(如何在awk脚本中访问shell变量值),但是获得特定错误消息的真正原因是{{1是你正在使用旧的,破坏的awk(Solaris上的usr / bin / awk),它会为大多数awk脚本生成错误消息,无论是有效还是其他。如果可能的话,使用GNU awk,否则在Solaris上使用/ usr / xpg4 / bin / awk(或者nawk但它与POSIX兼容性较低)。
绝对没有人应该使用旧的,破坏的awk,所以不要基于假设有人可能正在使用它来限制你的代码。如果他们那么他们需要更新他们的PATH而不是那样做。我非常惊讶你在linux上发现了它的一个版本,我以为只有Solaris才能解决这个问题。如果你正在编写一个shell脚本,你可以确保在调用awk之前在PATH中跳过它,例如伪代码:
awk: syntax error near line 1 awk: bailing out near line 1
或:
if (I'm on Solaris)
then
AWK=/usr/xpg4/bin/awk
else
AWK=$(which awk)
fi
$AWK -v x=y 'script' file
或其他测试你的PATH中第一个awk的东西是旧的,破坏了awk,如果是这样就跳过它到另一个awk