awk, повторяющиеся значения

изменить

cd $CT_PATH && cap -q -s instance=$instance mode=quiet diagnostics:all
cap production deploy
cap sales-demo deploy
от

до

cd $CT_PATH 
[[ $1 = rerun ]] || cap -q -s instance=$instance mode=quiet diagnostics:all
cap production deploy
cap sales-demo deploy
1
22.11.2018, 00:51
2 ответа
awk '!seen[$4, $5]++ > 1' DemoDATA.txt

почти правильно, за исключением того, что поля в файле разделены символом |, и что поля, в которых вы должны искать фамилию и дату рождения, — это поля 5, 6 и 7. Вы также не нужно сравнивать с 1 (Я понимаю, почему вы это делаете, но сравнение никогда не будет верным ).

Исправлено:

awk -F '|' '!seen[$5, $6, $7]++' DemoDATA.txt

Однако при этом будут выведены только дубликаты, а не исходная строка. Для этого вам нужно будет сохранить весь файл в памяти во время его разбора...

... это то, что делают ответы на " Как мне напечатать все строки файла с повторяющимися значениями в определенном столбце " (или нет, если они умны,некоторые из них ).

2
27.01.2020, 23:32

Как предложил Кусалананда, сохранение всего файла в памяти:

awk -F'|' '
    {
        key = $5 FS $6 FS $7
        count[key]++
        data[key] = data[key] (count[key] == 1 ? "" : ORS) $0
    }
    END { for (key in count) if (count[key] > 1) print data[key] }
' DemoDATA.txt

или

perl -F'\|' -ane '
        $key = join "|", @F[4..6];
        push @{$data{$key}}, $_;
    } END {
        print @{$data{$_}} for grep {@{$data{$_}} > 1} keys %data;
' DemoDATA.txt
0
27.01.2020, 23:32

Теги

Похожие вопросы