diff --git a/docs/src/data-diving-examples.md b/docs/src/data-diving-examples.md index 100716ec2..297eca211 100644 --- a/docs/src/data-diving-examples.md +++ b/docs/src/data-diving-examples.md @@ -26,7 +26,7 @@ Vertical-tabular format is good for a quick look at CSV data layout -- seeing wh wc -l data/flins.csv
- 36635 data/flins.csv +36635 data/flins.csv
@@ -227,7 +227,7 @@ Peek at the data: wc -l data/colored-shapes.dkvp
- 10078 data/colored-shapes.dkvp +10078 data/colored-shapes.dkvp
diff --git a/docs/src/date-time-examples.md b/docs/src/date-time-examples.md index 5bcbdac01..cab74de3c 100644 --- a/docs/src/date-time-examples.md +++ b/docs/src/date-time-examples.md @@ -68,7 +68,7 @@ date,qoh wc -l data/miss-date.csv
- 1372 data/miss-date.csv +1372 data/miss-date.csvSince there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using `strptime`, then compute adjacent differences (the `cat -n` simply inserts record-counters): diff --git a/docs/src/manpage.md b/docs/src/manpage.md index 79b2c5a0e..9cf6f281f 100644 --- a/docs/src/manpage.md +++ b/docs/src/manpage.md @@ -1837,6 +1837,7 @@ This is simply a copy of what you should see on running `man mlr` at a command p -nf {comma-separated field names} Same as -n -nr {comma-separated field names} Numerical descending; nulls sort first -t {comma-separated field names} Natural ascending + -b Move sort fields to start of record, as in reorder -b -tr|-rt {comma-separated field names} Natural descending -h|--help Show this message. @@ -3745,5 +3746,5 @@ This is simply a copy of what you should see on running `man mlr` at a command p MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io - 2025-07-04 4mMILLER24m(1) + 2025-07-11 4mMILLER24m(1) diff --git a/docs/src/manpage.txt b/docs/src/manpage.txt index 6cd711699..b2f31f3d1 100644 --- a/docs/src/manpage.txt +++ b/docs/src/manpage.txt @@ -1816,6 +1816,7 @@ -nf {comma-separated field names} Same as -n -nr {comma-separated field names} Numerical descending; nulls sort first -t {comma-separated field names} Natural ascending + -b Move sort fields to start of record, as in reorder -b -tr|-rt {comma-separated field names} Natural descending -h|--help Show this message. @@ -3724,4 +3725,4 @@ MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io - 2025-07-04 4mMILLER24m(1) + 2025-07-11 4mMILLER24m(1) diff --git a/docs/src/online-help.md b/docs/src/online-help.md index 5bbee15a1..f1b8d4d18 100644 --- a/docs/src/online-help.md +++ b/docs/src/online-help.md @@ -230,6 +230,7 @@ Options: -nf {comma-separated field names} Same as -n -nr {comma-separated field names} Numerical descending; nulls sort first -t {comma-separated field names} Natural ascending +-b Move sort fields to start of record, as in reorder -b -tr|-rt {comma-separated field names} Natural descending -h|--help Show this message. diff --git a/docs/src/reference-verbs.md b/docs/src/reference-verbs.md index ab7a599fa..49c212b97 100644 --- a/docs/src/reference-verbs.md +++ b/docs/src/reference-verbs.md @@ -2960,6 +2960,7 @@ Options: -nf {comma-separated field names} Same as -n -nr {comma-separated field names} Numerical descending; nulls sort first -t {comma-separated field names} Natural ascending +-b Move sort fields to start of record, as in reorder -b -tr|-rt {comma-separated field names} Natural descending -h|--help Show this message. @@ -4133,7 +4134,7 @@ There are two main ways to use `mlr uniq`: the first way is with `-g` to specify wc -l data/colored-shapes.csv
- 10079 data/colored-shapes.csv +10079 data/colored-shapes.csv
@@ -4290,7 +4291,7 @@ color=purple,shape=square,flag=0 wc -l data/repeats.dkvp
- 57 data/repeats.dkvp +57 data/repeats.dkvp
diff --git a/man/manpage.txt b/man/manpage.txt
index 6cd711699..b2f31f3d1 100644
--- a/man/manpage.txt
+++ b/man/manpage.txt
@@ -1816,6 +1816,7 @@
-nf {comma-separated field names} Same as -n
-nr {comma-separated field names} Numerical descending; nulls sort first
-t {comma-separated field names} Natural ascending
+ -b Move sort fields to start of record, as in reorder -b
-tr|-rt {comma-separated field names} Natural descending
-h|--help Show this message.
@@ -3724,4 +3725,4 @@
MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite
https://miller.readthedocs.io
- 2025-07-04 4mMILLER24m(1)
+ 2025-07-11 4mMILLER24m(1)
diff --git a/man/mlr.1 b/man/mlr.1
index 23b6162f0..fd96eaa0b 100644
--- a/man/mlr.1
+++ b/man/mlr.1
@@ -2,12 +2,12 @@
.\" Title: mlr
.\" Author: [see the "AUTHOR" section]
.\" Generator: ./mkman.rb
-.\" Date: 2025-07-04
+.\" Date: 2025-07-11
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
-.TH "MILLER" "1" "2025-07-04" "\ \&" "\ \&"
+.TH "MILLER" "1" "2025-07-11" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Portability definitions
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -2289,6 +2289,7 @@ Options:
-nf {comma-separated field names} Same as -n
-nr {comma-separated field names} Numerical descending; nulls sort first
-t {comma-separated field names} Natural ascending
+-b Move sort fields to start of record, as in reorder -b
-tr|-rt {comma-separated field names} Natural descending
-h|--help Show this message.
diff --git a/pkg/transformers/sort.go b/pkg/transformers/sort.go
index 945c6e581..6342192bb 100644
--- a/pkg/transformers/sort.go
+++ b/pkg/transformers/sort.go
@@ -83,6 +83,7 @@ func transformerSortUsage(
fmt.Fprintf(o, "-nf {comma-separated field names} Same as -n\n")
fmt.Fprintf(o, "-nr {comma-separated field names} Numerical descending; nulls sort first\n")
fmt.Fprintf(o, "-t {comma-separated field names} Natural ascending\n")
+ fmt.Fprintf(o, "-b Move sort fields to start of record, as in reorder -b\n")
fmt.Fprintf(o, "-tr|-rt {comma-separated field names} Natural descending\n")
fmt.Fprintf(o, "-h|--help Show this message.\n")
fmt.Fprintf(o, "\n")
@@ -107,6 +108,7 @@ func transformerSortParseCLI(
groupByFieldNames := make([]string, 0)
comparatorFuncs := make([]mlrval.CmpFuncInt, 0)
+ doMoveToHead := false
for argi < argc /* variable increment: 1 or 2 depending on flag */ {
opt := args[argi]
@@ -255,6 +257,9 @@ func transformerSortParseCLI(
comparatorFuncs = append(comparatorFuncs, mlrval.NumericDescendingComparator)
}
+ } else if opt == "-b" {
+ doMoveToHead = true
+
} else {
transformerSortUsage(os.Stderr)
os.Exit(1)
@@ -274,6 +279,7 @@ func transformerSortParseCLI(
transformer, err := NewTransformerSort(
groupByFieldNames,
comparatorFuncs,
+ doMoveToHead,
)
if err != nil {
fmt.Fprintln(os.Stderr, err)
@@ -304,6 +310,7 @@ type TransformerSort struct {
// -- Input
groupByFieldNames []string
comparatorFuncs []mlrval.CmpFuncInt
+ doMoveToHead bool
// -- State
// Map from string to *list.List:
@@ -316,11 +323,13 @@ type TransformerSort struct {
func NewTransformerSort(
groupByFieldNames []string,
comparatorFuncs []mlrval.CmpFuncInt,
+ doMoveToHead bool,
) (*TransformerSort, error) {
tr := &TransformerSort{
groupByFieldNames: groupByFieldNames,
comparatorFuncs: comparatorFuncs,
+ doMoveToHead: doMoveToHead,
recordListsByGroup: lib.NewOrderedMap(),
groupHeads: lib.NewOrderedMap(),
@@ -346,6 +355,13 @@ func (tr *TransformerSort) Transform(
if !inrecAndContext.EndOfStream {
inrec := inrecAndContext.Record
+ if tr.doMoveToHead {
+ n := len(tr.groupByFieldNames)
+ for i := n - 1; i >= 0; i-- {
+ inrec.MoveToHead(tr.groupByFieldNames[i])
+ }
+ }
+
groupingKey, selectedValues, ok := inrec.GetSelectedValuesAndJoined(
tr.groupByFieldNames,
)
diff --git a/test/cases/cli-help/0001/expout b/test/cases/cli-help/0001/expout
index a451ac0c5..c211e2cd9 100644
--- a/test/cases/cli-help/0001/expout
+++ b/test/cases/cli-help/0001/expout
@@ -982,6 +982,7 @@ Options:
-nf {comma-separated field names} Same as -n
-nr {comma-separated field names} Numerical descending; nulls sort first
-t {comma-separated field names} Natural ascending
+-b Move sort fields to start of record, as in reorder -b
-tr|-rt {comma-separated field names} Natural descending
-h|--help Show this message.