对简单的awk命令感到沮丧
我试图使用函数列出字段1的内容:对简单的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
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命令能做什么?