检查列值与awk / bash的顺序相同

时间:2015-05-12 21:40:30

标签: bash awk

我有一个输入文件:

public String makeBitmapPath(Bitmap bmp){
        // TimeStamp
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

        String path = Environment.getExternalStorageDirectory().toString();
        OutputStream fOut = null;
        File file = new File(path, "Photo"+ timeStamp +".jpg"); // the File to save to
        try {
            fOut = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
            fOut.flush();
            fOut.close(); // do not forget to close the stream

            MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
        } catch (IOException e){
            // whatever
        }
        return file.getPath();
    }

第一列指定一个组,第二列指定该组的某些值。

我想检查每个组的值顺序是否相同。

例如,A组的值为23,45,32,61,78。对于B组,值的顺序相同。但是在C组中,违反了该顺序(以粗体显示),因此输出应该只是“假”。

如果是C组,也会遵循值的顺序,输出将为“true”。

请注意,第一列中的组都是唯一的,没有重复的组。

3 个答案:

答案 0 :(得分:2)

!f { a[++i] = $2 }              # save first sequence
NR>1 && $1!=p { f=1; i=1 }      # set flag and reset index on new sequence
{ p=$1 }                        # save value of first column
f && a[i++]!=$2 { m=1; exit }   # if number not in sequence, set m and exit early
END { print m?"false":"true" }  # print false or true, depending on m

awk -f script.awk file

一样运行

答案 1 :(得分:1)

awk应该有效:

awk '$1 != p {
   if (!grp1 && grp)
      grp1 = grp;
  if (grp != grp1) {
     print p " - false";
     done = 1;
     exit
  };
  grp = "";
  p = $1
}
{
   grp = grp ":" $2
}
END {
  if (!done && grp != grp1)
     print p " - false"
}' file

打印:

C - false

答案 2 :(得分:1)

另一种解决方案:

 NR == 1 {
    initial = $1
    returnVal = ""
}
{
    if (initial == $1) {
        array[++i] = $2
    } else {
        if (anchor != $1)
            ix = 0
        anchor = $1
        if (array[++ix] != $2) {
            returnVal = 1
        }
    }
}
END {
    print (returnVal) ? "false" : "true" ;
}