# An Awk Primer/Operations

## Relational Operators

Awk's relational operations have already been discussed. As a quick reminder, here they are:

• `<` Less than
• `<=` Less than or equal to
• `>` Greater than
• `>=` Greater than or equal to
• `==` Equal to
• `!=` Not equal to
• `~` Matches (compares a string to a regular expression)
• `!~` Does not match

Note that, unlike some languages, relational expressions in Awk do not return a value. They only evaluate to a true condition or a false condition. That means that a Awk program like this:

```BEGIN {a=1; print (a==1)}
```

It doesn't print anything at all, and trying to use relational expressions as part of an arithmetic expression causes an error.

### Logic Operators

To group together the relational operator into more complex expressions, Awk provides three logic (or Boolean) operators:

• `&&` And (reports "true" if both sides are true)
• `||` Or (reports "true" if either side, or both, are true)
• `!` Not (Reverses true/false of the following expression)

## Arithmetic Operators

Awk uses the standard four arithmetic operators:

• `+` Addition
• `-` Subtraction
• `*` Multiplication
• `/` Division
• `^` Exponentiation (`**` may also work)
• `%` Remainder

All computations are performed in floating-point. They are performed with the expected order of operations.

### Increments

There are increment and decrement operators:

• `++` Increment
• `--` Decrement

The position of these operators with respect to the variable they operate on is important. If `++` precedes a variable, that variable is incremented before it is used in some other operation. For example:

```BEGIN {x=3; print ++x}
```

This will print 4. If `++` follows a variable, that variable is incremented after it is used in some other operation. For example:

```BEGIN {x=3; print x++}
```

This will print 3, but `x` will equal four from that point on. Similar remarks apply to `--`. Of course, if the variable being incremented or decremented is not part of some other operation at that time, it makes no difference where the operator is placed.

### Compound Assignments

Awk also allows the following shorthand operations for modifying the value of a variable:

```x += 2
x = x + 2
```
```x -= 2
x = x - 2
```

You get the idea. This shortcut is available for all of the arithmetic operations (`+= -= *= /= ^= %=`).

## Concatenation

There is only one unique string operation: concatenation. Two strings can be easily concatenated by placing them consecutively on the same line. Only a space needs to separate them. For example:

```BEGIN {string = "Super" "power"; print string}
```

This prints:

```Superpower
```

The strings can be concatenated even if they are variables. This produces the same result as above:

```BEGIN {a = "Super"; b = "power"; print (a b)}
```

The parentheses might not be necessary, but they are often used to make sure that the concatenation is interpreted correctly.

## The Conditional

There is an interesting operator called the conditional operator. It has two parts. Look at this example:

```print ( price > 500 ? "too expensive" : "cheap" )
```

This will print either "too expensive" or "cheap" depending on the value of `price`. The condition before the question mark is evaluated. If true, the first statement is executed, and if false the second is executed. The statements are separated by a colon.