跨行比较文件值

时间:2019-07-16 18:28:57

标签: linux bash shell

我有一个文件,其中包含以下内容,描述了范围。

library(data.table)
setDT(d)
d[, rt := as.numeric(as.character(rt))]

i <- dt[, which(condition == 'ITI' & !is.na(rt))]
d[i - 1, c('response', 'rt') := d[i, .(response, rt + 2)]]
d[i, c('response', 'rt') := .('None', NA)]

d
#     condition response  rt
#  1:       ITI     None  NA
#  2:       pos        6 1.5
#  3:       ITI     None  NA
#  4:       ITI     None  NA
#  5:       neg        7 2.2
#  6:       ITI     None  NA
#  7:       ITI     None  NA
#  8:       ITI     None  NA
#  9:       pos        7 1.2
# 10:       ITI     None  NA
# 11:       neg        6 2.4
# 12:       ITI     None  NA
# 13:       ITI     None  NA
# 14:       pos        6 1.4
# 15:       ITI     None  NA

我需要验证:

  1. 在同一行上,该行的左侧值<=该行的右侧值
  2. 在连续的行上,上一行的右值<=下一行的左值

3 个答案:

答案 0 :(得分:2)

您可以使用此awk

awk -F, '$1>$2 || (NR>1 && p>$1){exit 1} {p=$2}' file && echo "true" || echo "false"

在这里,我们将前一行的第二列存储在变量p中。

答案 1 :(得分:0)

当我们假设每行有两个带逗号的字段时,您希望看到所有数字等于或大于最后一个。
在这种特殊情况下,您可以使用

[[ $(tr "," "\n" < file) == $(tr "," "\n" < file |sort -n) ]] && echo "true" || echo "false"

使用sort -c选项更容易:

tr "," "\n" < file | sort -nc 2>/dev/null && echo "true" || echo "false"

答案 2 :(得分:0)

类似于Walter的解决方案-

$: tr , "\n" < file | sort -n --check && echo valid    
valid

tr将所有逗号都转换为换行符,从而将文件呈现为一列,您的OP则应将其按数字排序。

sort -n --check如果按数字排序,则返回有效的零返回码,如果不是,则返回1。

echo仅在报告-&&检查sort的退货,并告诉您文件是否良好。