2015-11-19 354 views
1

是否可以在同一内联的另一个AWK块中传递AWK变量?将下面的代码在哪里工作$ 8由值周一11月16日16:00:00 2015年将AWK变量值传递给嵌套的AWK

|awk -F"[][]" '{print $2, $6, ${echo $8|awk '{d=$0;cmd="date -d\""d"\" +\"%a %b %d %r %Y\"" ;cmd|getline $0;close(cmd)}7'}}' 
+0

您是路要走。 awk不是shell。获取Arnold Robbins编写的“有效的Awk编程”第4版,并在阅读前几章后再试一次。 –

+0

是的,我明白,我一定会检查。但是,因为我需要紧急基础上的这种解决方案,无论如何,嵌套AWK都可以实现,或者根本无法实现? –

+1

如果你给出一个你有的输入样本和你试图从中得到的输出,你可能会有更好的运气让别人为你解开这个问题。 – jas

回答

1

基于你今天问了两个问题,这个问题其实问到两个答案结合在一个声明。
这可以通过修改埃德莫顿回答Date manipulation in awk variable : Non Military Format并将其嵌入到你的awk脚本来实现更简单(即无需外部调用):

awk -F"[][]" '{ split($8,a,/[: ]/) 
    p = "AM" 
    if(a[4]a[5]a[6] > 120000) { 
     p = "PM" 
     a[4] = a[4] > 12 ? a[4] - 12 : a[4] 
    } else if(a[4] < 1) { 
     a[4] = 12 
    } 
    datetime=sprintf("%02d:%02d:%02d %s",a[4],a[5],a[6],p) 
    print $2, $6, a[1]" "a[2]" "a[3]" "datetime" "a[7]}'