开发者

Check if a particular string is in a file bash

I want to write a script to check for duplicates For example: I have a text file with information in the format of /etc/passwd

alice:x:1008:555:William Williams:/home/bill:/bin/bash
bob:x:1018:588:Bobs Boos:/home/bob:/bin/bash
bob:x:1019:528:Robt Ross:/home/bob:/bin/bash
james:x:1012:518:Tilly James:/home/bob:/bin/bash

I want to simply check if there are duplicate users and if there are, output the line to standard error. So in the example above since bob appears twice my output would simply generate something like:

Error duplicate user
bob:x:1018:588:Bobs Boos:/home/bob:/bin/bash
bob:x:1019:528:Robt Ross:/home/bob:/bin/bash

Right now I have a while loop that reads each line and stores each piece of information in a variable using awk -F that is delimited with ":". After storing my username I am not too sure on the best approach to check to see if it already exists.

Some parts of my code:

while read line; do
        echo $line
        user=`echo $line | awk -F : '{print $1}'`
        match=`开发者_开发技巧grep $user $1`($1 is the txtfile)
        if [ $? -ne 0 ]; then
                echo "Unique user"
        else
                echo "Not unique user"
                then somehow grep those lines and output it
        fi
done

The matching does not produce the right results

Suggestions?


instead of re-inventing the wheel, use the following tools:

  • cut to extract first field
  • sort and uniq to keep duplicated lines only.

    cut -d : -f 1 | sort | uniq -d | while read i ; do
                                       echo "error: duplicate user $i"
                                     done
    


Sounds like a job for awk to me:

% awk -F':' '
/:/ {
    count[$1] += 1
}

END {
    for (user in count) {
        if (count[user] > 1) {
            print user " appears in the file " count[user] " times."
        }
    }
}
' /etc/passwd 


A perl-proposal:

perl -F: -lanE 'push @{$h{$F[0]}},$_; END{for $k (keys %h){if(@{$h{$k}}>1){say "Error";say for @{$h{$k}}}}}' file
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜