Решение Awk или Perl для удаления строк с неполными данными - PullRequest
4 голосов
/ 11 ноября 2011

Существует ли однострочник Awk или Perl, который может удалить все строки, которые не содержат полных данных.Мне часто нужно что-то подобное.Например, в настоящее время у меня есть файл с разделителями табуляции, который выглядит следующим образом:

1    asdf    2
9    asdx    4
3    ddaf    6
5            4
2    awer    4

Как можно удалить строку, которая не имеет значения в поле 2?

Как можнострока, которая не имеет значения в ЛЮБОМ поле, будет удалена?

Я пытался сделать что-то вроде этого:

awk -F"\t" '{if ($2 != ''){print $0}}' 1.txt > 2.txt

Спасибо.

Ответы [ 6 ]

4 голосов
/ 11 ноября 2011

В awk, если вы знаете, что в каждой строке должно быть ровно 3 элемента:

awk -F'\t+' 'NF == 3' INFILE > OUTFILE
2 голосов
/ 11 ноября 2011

Я бы просто искал последовательные вкладки, или лидирующие или конечные вкладки:

perl -ne 'next if /\t\t/ or /^\t/ or /\t$/; print' tabfile
2 голосов
/ 11 ноября 2011

Для конкретного решения:

awk -F'\t' '$2 != ""' input.txt > output.txt

Для общего решения:

awk -F'\t' -vCOLS=3 '{ 
    valid=1; 
    for (i=1; i<=COLS; ++i) { 
        if ($i == "") { 
            valid=0; 
            break; 
        } 
    } 
    if (valid) { 
        print; 
    } 
}' input.txt > output.txt
1 голос
/ 11 ноября 2011
perl -lane 'print if $#F == 2' INFILE
0 голосов
/ 13 ноября 2011

Просто используйте awk 'NF == 3' INFILE > OUTFILE, и он будет использовать только пробелы (табуляции, пробелы и т. Д.) В качестве разделителя полей.

0 голосов
/ 11 ноября 2011
perl -F/\t/ -nle 'print if @F == 3' 1.txt > 2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...