Как получить строку в bash с буквами не по порядку? - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть задача, которая состоит в том, чтобы найти строки (аббревиатуры), которые повторяются в каком-то определенном текстовом файле.

Ниже приведен пример:

...
the
the
het
het
het
teh
teh
teh
teh
...

На первом шаге я могу подсчитать, сколько раз каждый из них появляется с помощью этой команды:

cat text_file.txt | sort | uniq -c | sort -gr

Ивывод выглядит примерно так:

2 the
3 het
4 teh

Но мне нужно также «посчитать / сложить» эти три выхода, потому что они используют те же три символа, но в другом порядке.

Можетребята, пожалуйста, помогите мне с этим?

1 Ответ

2 голосов
/ 28 апреля 2019

С GNU awk для разбиения строки на символы с нулевой FS и sorted_in:

$ cat tst.awk
{
    split($0,chars,"")
    PROCINFO["sorted_in"] = "@val_str_asc"
    key = ""
    for (i in chars) {
        key = key chars[i]
    }
    cnt[key]++
}
END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (key in cnt) {
        print key, cnt[key]
    }
}

$ cat file
the
het
teh
foobar
fobar
oofrab

$ awk -f tst.awk file
abfoor 2
abfor 1
eht 3
...