对简单的awk命令感到沮丧

对简单的awk命令感到沮丧,awk,printf,newline,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

我试图使用函数列出字段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
我需要更改什么才能换行?

您的代码是

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
    变量得到了扩展

    • 您的代码是

      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
        变量得到了扩展

        • 问题是:

          echo $ALLNAMES
          
          应使用引号解决:

          echo "$ALLNAMES"
          
          问题是:

          echo $ALLNAMES
          
          应使用引号解决:

          echo "$ALLNAMES"
          

          如果您不打算在其他地方使用varALLNAMES,只需:

          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
          }
          

          如果您不打算在其他地方使用varALLNAMES,只需:

          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
          }
          

          @Tiago为您的具体问题提供了答案,但总体而言,您的脚本应该是shell脚本@klashxx post或此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
          }
          

          或者类似的问题。

          @Tiago为您的具体问题提供了答案,但总体而言,您的脚本应该是shell脚本@klashxx post或此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
          }
          

          或者类似。

          尝试在echo的周围加上双引号,如
          echo“$ALLNAMES”
          。也不是说您可以只使用
          awk'{print$0}'
          而不需要
          printf
          或者换行符
          cut
          已经生成了您想要的输出-您希望awk命令能做什么?尝试在echo周围加上双引号,比如
          echo“$ALLNAMES”
          。也不是说您可以只使用
          awk'{print$0}'
          而不需要
          printf
          或者换行符
          cut
          已经生成了您想要的输出-您希望awk命令能做什么?