2014-09-22 63 views
0

我的剧本的第一部分作品在Debian喘息框:AWK Debian的挤压与Debian的喘息

OUTPUT_DIR=/share/es-ops/Build_Farm_Reports/WorkSpace_Reports 
    BASE=/export/ws 
    TODAY=`date +"%m-%d-%y"` 
    HOSTNAME=`hostname` 
    WORKSPACES=("bob_avail" "bob_used" "mel_avail" "mel_used" "sideshow-ws2_avail" "sideshow-ws2_used") 
    if ! [ -f $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == "sideshow" ]; then 
    echo "$HOSTNAME" > $OUTPUT_DIR/$HOSTNAME.csv # with a linebreak 
    separator="," # defined empty for the first value 
    for v in "${WORKSPACES[@]}" 
    do 
     echo -n "$separator$v" >> $OUTPUT_DIR/$HOSTNAME.csv # append, concatenated, the separator and the value to the file 
     #separator="," # comma for the next values 
    done 
    echo >> $OUTPUT_DIR/$HOSTNAME.csv # add a linebreak (if you want it) 
    WORKSPACES2=("bob" "mel" "sideshow-ws2") 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    elif [ $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == "sideshow" ]; then 
    WORKSPACES2=("bob" "mel" "sideshow-ws2") 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    else 
    : 
    fi 

,并产生这样的日产量每个cron的上午3:00 -8GMT熄灭时间:

sideshow 
    ,bob_avail,bob_used,mel_avail,mel_used,sideshow-ws2_avail,sideshow-ws2_used 
    09-20-14,470400,1032124,661826,1032124,43443,8 
    09-20-15,470400,1032124,661826,1032124,43443,8 
    09-20-16,470400,1032124,661826,1032124,43443,8 

但由于某些原因,当我尝试在这些其他3 Debian的挤压盒中运行它,我得到的值之间的三重逗号:

case "$HOSTNAME" in 
     simpsons) WORKSPACES=(bart_avail bart_used homer_avail home_used lisa_avail lisa_used \ 
           marge_avail marge_used releases_avail releases_used rt-private_avail rt-private_used \ 
           simpsons-ws0_avail simpsons-ws0_used simpsons-ws1_avail simpsons-ws1_used simpsons-ws2_avail \ 
           simpsons-ws2_used vsimpsons-ws_avail vsimpsons-ws_used) ;; 
     moes)  WORKSPACES=(barney_avail barney_used carl_avail carl_used lenny_avail lenny_used moes-ws2_avail moes-ws2_used) ;; 
     flanders) WORKSPACES=(flanders-ws0_avail flanders-ws0_used flanders-ws1_avail flanders-ws1_used flanders-ws2_avail \ 
           flanders-ws2_used maude_avail maude_used ned_avail ned_used rod_avail rod_used todd_avail \ 
           todd_used to-delete_avail to-delete_used) ;; 
    esac 
    if ! [ -f $OUTPUT_DIR/$HOSTNAME.csv ]; then 
    echo "$HOSTNAME" > $OUTPUT_DIR/$HOSTNAME.csv # with a linebreak 
    separator="," # defined empty for the first value 
    for v in "${WORKSPACES[@]}" 
    do 
     echo -n "$separator$v" >> $OUTPUT_DIR/$HOSTNAME.csv # append, concatenated, the separator and the value to the file 
     #separator="," # comma for the next values 
    done 
    echo >> $OUTPUT_DIR/$HOSTNAME.csv # add a linebreak (if you want it) 
    case "$HOSTNAME" in 
      simpsons) WORKSPACES2=(bart homer lisa marge releases rt-private simpsons-ws0 simpsons-ws1 simpsons-ws2 vsimpsons-ws) ;; 
      moes)  WORKSPACES2=(barney carl lenny moes-ws2) ;; 
      flanders) WORKSPACES2=(flanders-ws0 flanders-ws1 flanders-ws2 maude ned rod todd to-delete) ;; 
    esac 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
    BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    elif [ $OUTPUT_DIR/$HOSTNAME.csv ]; then 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    else 
    : 
    fi 

它看起来像这样:

simpsons 
    ,bart_avail,bart_used,homer_avail,home_used,lisa_avail,lisa_used,marge_avail,marge_used,releases_avail,releases_used,rt-private_avail,rt-private_used,simpsons-ws0_avail,simpsons-ws0_used,simpsons-ws1_avail,simpsons-ws1_used,simpsons-ws2_avail,simpsons-ws2_used,vsimpsons-ws_avail,vsimpsons-ws_used 
    09-21-14,,,43417,1154259,,,2669,1195007,,,3427,1194249,,,2948,162602,,,128174,281377,,,967520,991870,,,85,168836,,,11995,1011937,,,780184,199511,,,14251,22408 

你们能帮我减少三个逗号之间的值吗?

在这些3盒(辛普森,教育和体育,和佛兰德斯),以获得正确的果,并使用值的唯一方法是运行在awk这样的:

df -m /export/ws/maude | awk '{if (NR!=1) {print $3, $2}}' 

,看起来像这样:

492 163306 

否则,如果你像这样运行:

df -m /export/ws/maude | awk '{print $3, $2}' 

你得到这样的:

Used 1M-blocks 

492 163306 
+0

您应该修改您的示例以提供显示行为的* minimal *示例。在你的情况下,这将有点像'awk'我的破碎脚本<< EOF模拟输入到awk EOF'。 – 2014-09-22 04:46:40

+0

@MichaelGrünewald如果你看看我的帖子的底部,我的脚本不会从文件中读取它,它会根据df和awk命令生成输出。我不知道如何做的是在awk循环中添加''{if(NR!= 1){print $ 3,$ 2}}''。我对awk还不够了解。 – 2014-09-22 04:53:09

+1

'awk'从标准输入中读取数据,因此不用管道输出'df'命令,您可以提供带有五个样本输入行的here-document。此外,你不清楚你在问什么。 “你们能......吗?”之后的段落的目的是什么?“看起来像是第二个没有措辞的。 – 2014-09-22 05:00:48

回答

0

我固定一个变通三重逗号问题:

OUTPUT_DIR=/share/es-ops/Build_Farm_Reports/WorkSpace_Reports 
    BASE=/export/ws 
    TODAY=`date +"%m-%d-%y"` 
    HOSTNAME=`hostname` 
    WORKSPACES=("bob_avail" "bob_used" "mel_avail" "mel_used" "sideshow-ws2_avail" "sideshow-ws2_used") 
    if ! [ -f $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == "sideshow" ]; then 
    echo "$HOSTNAME" > $OUTPUT_DIR/$HOSTNAME.csv # with a linebreak 
    separator="," # defined empty for the first value 
    for v in "${WORKSPACES[@]}" 
    do 
     echo -n "$separator$v" >> $OUTPUT_DIR/$HOSTNAME.csv # append, concatenated, the separator and the value to the file 
     #separator="," # comma for the next values 
    done 
    echo >> $OUTPUT_DIR/$HOSTNAME.csv # add a linebreak (if you want it) 
    WORKSPACES2=("bob" "mel" "sideshow-ws2") 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    elif [ $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == "sideshow" ]; then 
    WORKSPACES2=("bob" "mel" "sideshow-ws2") 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    else 
    : 
    fi 
    case "$HOSTNAME" in 
     simpsons) WORKSPACES=(bart_avail bart_used homer_avail home_used lisa_avail lisa_used marge_avail marge_used releases_avail releases_used rt-private_avail rt-private_used simpsons-ws0_ava 
    il simpsons-ws0_used simpsons-ws1_avail simpsons-ws1_used simpsons-ws2_avail simpsons-ws2_used vsimpsons-ws_avail vsimpsons-ws_used) ;; 
     moes)  WORKSPACES=(barney_avail barney_used carl_avail carl_used lenny_avail lenny_used moes-ws2_avail moes-ws2_used) ;; 
     flanders) WORKSPACES=(flanders-ws0_avail flanders-ws0_used flanders-ws1_avail flanders-ws1_used flanders-ws2_avail flanders-ws2_used maude_avail maude_used ned_avail ned_used rod_avail ro 
    d_used todd_avail todd_used to-delete_avail to-delete_used) ;; 
    esac 
    if ! [ -f $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == `hostname` ]; then 
    echo "$HOSTNAME" > $OUTPUT_DIR/$HOSTNAME.csv # with a linebreak 
    separator="," # defined empty for the first value 
    for v in "${WORKSPACES[@]}" 
    do 
     echo -n "$separator$v" >> $OUTPUT_DIR/$HOSTNAME.csv # append, concatenated, the separator and the value to the file 
     #separator="," # comma for the next values 
    done 
    echo >> $OUTPUT_DIR/$HOSTNAME.csv # add a linebreak (if you want it) 
    case "$HOSTNAME" in 
      simpsons) WORKSPACES2=(bart homer lisa marge releases rt-private simpsons-ws0 simpsons-ws1 simpsons-ws2 vsimpsons-ws) ;; 
      moes)  WORKSPACES2=(barney carl lenny moes-ws2) ;; 
      flanders) WORKSPACES2=(flanders-ws0 flanders-ws1 flanders-ws2 maude ned rod todd to-delete) ;; 
    esac 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
    BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    sed -i s/,,,/,/g "$OUTPUT_DIR/$HOSTNAME.csv" 
    elif [ $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == `hostname` ]; then 
    case "$HOSTNAME" in 
      simpsons) WORKSPACES2=(bart homer lisa marge releases rt-private simpsons-ws0 simpsons-ws1 simpsons-ws2 vsimpsons-ws) ;; 
      moes)  WORKSPACES2=(barney carl lenny moes-ws2) ;; 
      flanders) WORKSPACES2=(flanders-ws0 flanders-ws1 flanders-ws2 maude ned rod todd to-delete) ;; 
    esac 
    df -m "${WORKSPACES2[@]/#//export/ws/}" | awk ' 
     BEGIN { "date +'%m-%d-%y'" | getline date; 
       printf "%s",date } 
     NR > 1 { printf ",%s,%s", $3, $2; } 
     END { printf "\n"}' >> "$OUTPUT_DIR/$HOSTNAME.csv" 
    sed -i s/,,,/,/g "$OUTPUT_DIR/$HOSTNAME.csv" 
    else 
    : 
    fi 

我只是把:

sed -i s/,,,/,/g "$OUTPUT_DIR/$HOSTNAME.csv" 

我真希望我会想到怎么做awk的部分那首先消除了三个逗号,但至少我的脚本现在起作用了。

相关问题