Text Processing
Cut Fields
Selecting Columns from Text
cut extracts fields from delimited text. It is useful for small colon-separated, comma-separated, or tab-separated records.
Program
Play the script to select a field number from a colon-delimited record.
cut_fields.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
record="Ada:ops:active"
field=2
value="$(printf '%s\n' "$record" | cut -d: -f "$field")"
echo "$field=$value"
#!/usr/bin/env bash
record="Ada:ops:active"
field=1
value="$(printf '%s\n' "$record" | cut -d: -f "$field")"
echo "$field=$value"
#!/usr/bin/env bash
record="Ada:ops:active"
field=3
value="$(printf '%s\n' "$record" | cut -d: -f "$field")"
echo "$field=$value"
record ← Ada:ops:active
3record="Ada:ops:active"4field=2values this stepAda:ops:activerecordfield ← 2
3record="Ada:ops:active"4field=25value="$(printf '%s\n' "$record" | cut -d: -f "$field")"values this step2fieldvalue ← ops
4field=25value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"values this stepopsvalue2fieldecho "$field=$value"
5value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"output2=opsvalues this step2fieldopsvalue
record ← Ada:ops:active
3record="Ada:ops:active"4field=1values this stepAda:ops:activerecordfield ← 1
3record="Ada:ops:active"4field=15value="$(printf '%s\n' "$record" | cut -d: -f "$field")"values this step1fieldvalue ← Ada
4field=15value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"values this stepAdavalue1fieldecho "$field=$value"
5value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"output1=Adavalues this step1fieldAdavalue
record ← Ada:ops:active
3record="Ada:ops:active"4field=3values this stepAda:ops:activerecordfield ← 3
3record="Ada:ops:active"4field=35value="$(printf '%s\n' "$record" | cut -d: -f "$field")"values this step3fieldvalue ← active
4field=35value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"values this stepactivevalue3fieldecho "$field=$value"
5value="$(printf '%s\n' "$record" | cut -d: -f "$field")"6echo "$field=$value"output3=activevalues this step3fieldactivevalue
Follow the Fields
recordstarts asAda:ops:active.- The colon
:splits the record into three fields. field=2askscutfor the second field.- The selected
valueisops. - The script prints
2=ops. | field number | field value | default? | | --- | --- | --- | | 1 | Ada | no | | 2 | ops | yes | | 3 | active | no |
delimiter
`-d:` tells `cut` that colon separates fields.
field number
`-f` chooses which delimited field to print.
text record
Simple delimited records are common in shell scripts and config files.
Exercise: cut_fields.sh
Reproduce 2=ops, then change field to the pinned variants 1 and 3 and predict 1=Ada and 3=active.