Skip to main content
added 238 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}END{for (i in arr) print i arr[i]}' ./*
  • $NF is the latest string separated by space(s) by default
  • the main trick is to create an associative named array with the current words as key and incrementing as value
  • at the END we iterate over the array to print each keys/values

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}END{for (i in arr) print i arr[i]}' ./*
  • $NF is the latest string separated by space(s) by default
  • the main trick is to create an associative named array with the current words as key and incrementing as value
  • at the END we iterate over the array to print each keys/values

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

deleted 11 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}
     END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}
     END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

added 4 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}
     END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}
     END{for (i in arr) print i arr[i]}' *

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' *

The -a is the split mode in @F default array

Like this, with one :

awk '$NF=="*"{$NF=""; arr[$0]++}
     END{for (i in arr) print i arr[i]}' ./*

With one-liner:

perl -anE '
    if ($F[-1] eq "*") {
        $k = join " ", @F[0..@F-2];
        $a->{$k}++
    }
    END{say "$_ $a->{$_}" for keys %$a}
' ./*

The -a is the split mode in @F default array

added 9 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
deleted 24 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
added 22 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
deleted 8 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
added 217 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
added 1 character in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
deleted 3 characters in body
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading
Source Link
Gilles Quénot
  • 36.7k
  • 7
  • 74
  • 97
Loading