我遇到了如何做某事的问题。我需要使用逗号分隔的字段按数据文件的顺序输出一些管道脚本。最后,我需要获取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输出。它会在中添加一个新标题。
我该怎么做?
答案 0 :(得分:1)
您可能需要-gt
而不是-g
:
if [ "$hwy" -gt "$selection" ]; then
^
答案 1 :(得分:0)
如果字段以逗号分隔,您应该告诉awk
使用逗号作为分隔符。
你可以只用awk
完成整个事情而不需要在循环中使用笨拙的echo
命令:
selection=${1:-31}
awk -F, -v selection=$selection '{ if ($7 > selection) print $7 }'
除了一个shebang线(#!/bin/sh
或类似的),这就是它所需要的一切。 ${1:-31}
表示法是shell parameter expansion的示例。