bash shell字段需要大于#

时间:2014-03-01 22:21:56

标签: linux bash

我遇到了如何做某事的问题。我需要使用逗号分隔的字段按数据文件的顺序输出一些管道脚本。最后,我需要获取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输出。它会在中添加一个新标题。

我该怎么做?

2 个答案:

答案 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的示例。