我一直试图使用AWK对输出进行排序,并且已经非常成功地完成了堆栈溢出的一些事情,直到我点击下面命令的最后一部分。
-bash-3.2$ find /home/username/www/devdir -mindepth 2 -maxdepth 2 -type d -printf "%TY %Tm %Tb %Td,%TH:%TM,%p,\n" | grep "^$r" | grep Aug | sort -r | awk -F '/' '{print $1,$6","$7}' | awk -F " " '$1, { for (i=3; i<=NF; i++) printf("%s ", $i); printf("\n"); }' | head -10
awk: $1, { for (i=3; i<=NF; i++) printf("%s ", $i); printf("\n"); }
awk: ^ syntax error
输出如下所示:
2010 08 Aug 28,11:51, Directory Tom,005,
2010 08 Aug 28,11:50, Directory Smith,004,
2010 08 Aug 28,11:46, Directory Jon,003,
我希望它看起来像:
2010 Aug 28,11:51, Directory Tom,005,
2010 Aug 28,11:50, Directory Smith,004,
2010 Aug 28,11:46, Directory Jon,003,
我想把它从中切掉“08”,有时候不会丢失之前完成的排序。这将改为下个月的09和下面的10,我相信我可以使用sed解决这个问题,但我不是它的专家。有人可以解释我应该采取什么措施来克服这个障碍吗?
我引用了这个问题来了解我需要做什么:Sorting output with awk, and formatting it
答案 0 :(得分:1)
这部分想要完成什么?
awk -F " " '$1, { }'
我的意思是1美元,......
关于更新:
sed 's/^\([0-9]\+\) 08 \(.\+\)$/\1 \2/'
应该把它剪掉。
或更通用:
sed 's/^\([0-9]\+\) [0-9][0-9] \(.\+\)$/\1 \2/'
答案 1 :(得分:1)
您可以将您的greps组合成一个和所有awks,seds并将其整合到一个awk
脚本中。由于您只需要一个月和一年的时间,因此您无需在%Tm
中添加find
,而且您实际上只按月份和时间排序。我假设$r
是年份。
约:
find /home/username/www/devdir -mindepth 2 -maxdepth 2 -type d -printf "%TY %Tb %Td,%TH:%TM,%p,\n" | grep "^$r.*Aug" | sort -r | awk -F '/' 'NR<=10{print $1,$6","$7}'
顺便说一句,这就是你打算如何做的事情:
printf($1" ");for (i=3; i<=NF; i++) printf("%s ", $i); printf("\n")
您将显式打印第一个字段,而不是通过引用包含它。但是,使用上面的建议你不需要这样做。