我在如何做某事方面遇到了问题。我需要按照带有逗号分隔字段的数据文件的顺序获取几个管道脚本的输出。最后,我需要让awk获取第7个字段中的数据,找到超过31的值并打印出来。这就是我目前所拥有的:
#!/bin/bash
selection='31'
if [ ! $# -lt 1 ]; then
selection=$1
fi
while read y; do
hwy=$(echo $y | awk -F':' '{print $7 }')
if [ "$hwy" -g "$selection" ]; then
echo $y
fi
done
我写了这个,所以你可以运行脚本,如果你想的话,把#改成另一个#。
在它从解析的数据文件中检索到这些信息后,我需要打印出一个我键入的标题(简单的echo命令),在20行数据之后打印标题,并在输出的最后一行打印出处理的记录数(简单的wc-l)。
我需要做什么才能从$7字段中解析大于31的值?在打印另一个页眉之前,如何用空行每隔20行打印一个页眉?
echo Year Make Model Cylinders Engine Displacement City Hwy
以及上述报告。如果有20个以上的输出。它会放入一个新的标头。
我该怎么做?
您可能想要-gt
而不是-g
:
if [ "$hwy" -gt "$selection" ]; then
^
如果字段是逗号分隔的,则应该告诉awk
使用逗号作为分隔符。
只需使用awk
就可以完成整个操作,而无需在循环中使用笨拙的echo
命令:
selection=${1:-31}
awk -F, -v selection=$selection '{ if ($7 > selection) print $7 }'
除了一条shebang线(#!/bin/sh
或类似的),这就是它所需要的。${1:-31}
表示法是shell参数展开的一个示例。