Shell脚本,如果为true,则从某些给定行打印整行

Shell脚本,如果为true,则从某些给定行打印整行,shell,Shell,我们需要写一个脚本,输入包含行数的文件, 其中一条管线上有5个测力计(1 | 2 | 3 | 4 | 5) 假设文件有3行,如 20 | 30 | 10 | 40 40 | 50 | 60 | 70 5 | 3 | 2 | 1 我们需要逐行读取文件,并检查第二个delimeter值是否大于第三个值(即30>10)。如果为真,则打印整行,以及打印第二个值>第三个值的所有行 需要任何人的帮助 提前感谢。这里有一种方法。将文件读入一个循环中,对于每一行,将其拆分为一个数组,如果arr[1]>arr[2

我们需要写一个脚本,输入包含行数的文件, 其中一条管线上有5个测力计(1 | 2 | 3 | 4 | 5)

假设文件有3行,如

20 | 30 | 10 | 40

40 | 50 | 60 | 70

5 | 3 | 2 | 1

我们需要逐行读取文件,并检查第二个delimeter值是否大于第三个值(即30>10)。如果为真,则打印整行,以及打印第二个值>第三个值的所有行

需要任何人的帮助


提前感谢。

这里有一种方法。将文件读入一个循环中,对于每一行,将其拆分为一个数组,如果
arr[1]>arr[2]
,则将其打印出来:

#!/bin/bash

while read line; do

  # split line on spaces and pipes
  IFS='| ' read -r -a arr <<< "$line"

  # echo line if second elem > third elem
  if [[ ${arr[1]} -gt ${arr[2]} ]]; then
    echo $line
  fi
done < text

到目前为止,您尝试了什么?@AjayKumar:在
awk
中这不是比在Posix shell中更容易吗?谢谢您的回复。实际上,我们需要编写一个脚本,以输入文件为例,该文件包含行数,其中一行有5个delimeters(1 | 2 | 3 | 4 | 5)。我们需要逐行读取,并检查第二个值是否大于第三个值(2>3)。如果为真,则打印整行,以及打印2>3的所有行