2010-08-28 50 views
1

我一直試圖使用AWK對輸出進行整理,並且在堆棧溢出中經歷了一些相當成功的操作,直到我點擊下面命令的最後部分。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, 

我woud喜歡切 「08」 出來,有時而不會丟失先前完成的排序。這將改變到下個月09和10以下,我相信我可以使用sed來解決這個問題,但我不是專家。有人可以闡明我應該怎樣做才能克服這個障礙?

我已經提到這個問題,得到的是什麼,我需要做一個想法:Sorting output with awk, and formatting it

回答

1

什麼想要做這部分正是實現?

awk -F " " '$1, { }' 

我指的是$ 1,...

關於更新:

sed 's/^\([0-9]\+\) 08 \(.\+\)$/\1 \2/' 

應該削減了這一點。

或多個通用:

sed 's/^\([0-9]\+\) [0-9][0-9] \(.\+\)$/\1 \2/' 
+0

我想保留一年(2010年)。 – eddylol 2010-08-28 18:41:07

+0

我更新了我的問題,以澄清如何讓輸出看起來像。 – eddylol 2010-08-28 18:46:40

+0

工作就像一個魅力! – eddylol 2010-08-28 18:52:43

1

你可以結合你的裏grep成一個和你awks,SEDS和頭都變成一個awk腳本。由於您只逗留一個月和一年,因此您不需要在find中包含%Tm,並且實際上只按月份和時間排序。我假設$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") 

您將打印的第一場明確,而不是通過引用包含它。但是,使用我上面的建議你不需要這樣做。