用简单的awk命令感到沮丧

时间:2014-06-23 11:33:14

标签: awk printf newline

我试图使用函数列出字段1的内容:

help(){
     if [[ $# -eq 0 ]] ; then
     echo '######################################'
     echo ''
     echo 'Argument to run run name must be given: ./report.sh Name'
     echo 'Report names are:'
     ALLNAMES=$(cut -d '|' -f 1 $CONFIGFILE | awk '{printf $0"\n"}')
     echo $ALLNAMES
     echo '######################################'
     exit 0
     fi
}

我得到的输出是:

$ bin/report.sh
######################################

Argument to run run name must be given: ./report.sh Name
Report names are:
ItemA ItemB
######################################

我想要:

$ bin/report.sh
######################################

Argument to run run name must be given: ./report.sh Name
Report names are:
ItemA
ItemB
######################################

如果我运行cut命令,我得到:

[david@kallibu]$ cut -d '|' -f 1 conf/report.conf
ItemA
ItemB

我需要更改以获取换行符吗?

4 个答案:

答案 0 :(得分:2)

问题是:

echo $ALLNAMES

应该用引号解决:

echo "$ALLNAMES"

答案 1 :(得分:2)

如果您不想在其他地方使用var ALLNAMES ,只需:

help(){
     if [[ $# -eq 0 ]] ; then
     echo '######################################'
     echo ''
     echo 'Argument to run run name must be given: ./report.sh Name'
     echo 'Report names are:'
     cut -d '|' -f 1 conf/report.conf
     echo '######################################'
     exit 0
     fi
}

答案 2 :(得分:1)

您的代码将是,

help(){
     if [[ $# -eq 0 ]] ; then
     echo '######################################'
     echo ''
     echo 'Argument to run run name must be given: ./report.sh Name'
     echo 'Report names are:'
     ALLNAMES=$(awk -F'|' '{print $1}' $CONFIGFILE)
     echo "$ALLNAMES"
     echo '######################################'
     exit 0
     fi
}
  • 您可以尝试使用此awk -F'|' '{print $1}' $CONFIGFILE命令获取第一列的值,其中|为分隔符。

  • 您需要将ALLNAMES置于双引号内。只有这样,ALLNAMES变量才得以扩展。

答案 3 :(得分:0)

@Tiago为您的具体问题提供了答案,但总的来说,您的脚本应该是发布的shell脚本@klashxx或者这个awk脚本:

help(){
  if [[ $# -eq 0 ]] ; then
    awk '
      BEGIN {
         FS = "|"
         print "######################################\n"
         print "Argument to run run name must be given: ./report.sh Name"
         print "Report names are:"
      }
      { print $1 }
      END {
         print "######################################"
      }
    ' "$CONFIGFILE"
    exit 0
  fi
}

或类似。