Need assistance with an IF statement to compare a list of SHA keys between two repositories.


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need assistance with an IF statement to compare a list of SHA keys between two repositories.
# 1  
Need assistance with an IF statement to compare a list of SHA keys between two repositories.

Hello.

My first time here.

What I am trying to do is this.

FileA is located on a web server
FileB is located on local storage

Both files contain a large list of information of not only SHA keys but versions, and other information.

I need a statement that can compare between FileA and FileB and ONLY the SHA keys in the file.
  • If the statement finds that ALL of the SHA key's listed on File A are ALSO in located anywhere in File B, its a match.
  • If it cannot find the SHA key on FileB, its is not a match and the missing SHA keys need to be printed.
# 2  
You need a lot more than an if statement to do what you want to do. And, if you want our help we will need a lot more information:
  1. What operating system are you using?
  2. What shell are you using?
  3. What are the formats of files FileA and FileB?
  4. Can you show us a representative sample of the contents of FileA and FileB and show us the results you hope to get when processing those two sample files?
  5. And, most importantly, please show us what you have tried to solve this problem on your own.
# 3  
Assuming you already have the two file locally (you will need to fetch FileA from the web server using something like wget).
Also that the SHA keys are a string of 64 hex digits (0-9 a-f) which are separated from other text in file by one or more white space characters.

You could collect the keys using grep like this:

Code:
$ grep -Eow '[0-9a-f]{64}' FileA > KeylistA
$ grep -Eow '[0-9a-f]{64}' FileB > KeylistB

Grep can then output any key(s) in KeylistA not in KeyListB like this.
Code:
$ grep -vf KeylistB KeylistA || echo "Files Match"

This User Gave Thanks to Chubler_XL For This Post:
# 4  
Quote:
Originally Posted by Don Cragun
You need a lot more than an if statement to do what you want to do. And, if you want our help we will need a lot more information:
  1. What operating system are you using?
  2. What shell are you using?
  3. What are the formats of files FileA and FileB?
  4. Can you show us a representative sample of the contents of FileA and FileB and show us the results you hope to get when processing those two sample files?
  5. And, most importantly, please show us what you have tried to solve this problem on your own.
Hello

OS:
Code:
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
[removed links]
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

Shell:
Code:
$SHELL -version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

Formats and Code:
Code:
Package: [package name]
Priority: extra
Section: --
Installed-Size: 12787
Maintainer: [Creator of the package]
Architecture: amd64
Source: [Source of the Package]
Version: [Version]
Depends: [Depends]
Filename: [Filename and directory of the file]
Size: [Filesize]
MD5sum: [checksum]
SHA1: [checksum]
SHA256: [checksum]
Description [description]
Homepage: [homepage]

Quote:
Originally Posted by Chubler_XL
Assuming you already have the two file locally (you will need to fetch FileA from the web server using something like wget).
Also that the SHA keys are a string of 64 hex digits (0-9 a-f) which are separated from other text in file by one or more white space characters.

You could collect the keys using grep like this:

Code:
$ grep -Eow '[0-9a-f]{64}' FileA > KeylistA
$ grep -Eow '[0-9a-f]{64}' FileB > KeylistB

Grep can then output any key(s) in KeylistA not in KeyListB like this.
Code:
$ grep -vf KeylistB KeylistA || echo "Files Match"

Hi, thank you for this - I went ahead and tested this and it seems to work fine, I then modifed it to this format:
Code:
echo "The following keys were not found on the apt-mirror:" && grep -vf <(curl [repo-file] | grep ‘SHA256’) <(cat [address-of-local-repo-file] | grep ‘SHA256’) || echo "Files Match"

and this also seems to work.

So lets say I wanted to take a step further and wanted to also retrieve the program name and version of the repo's from 'ListA' that do not appear on ListB given that they are included in the list I mentioned above?

Thanks.
# 5  
You could use awk like this:

Code:
awk '
  FNR==1 { file++ }
  /^Package: / { p = substr($0,10) }
  /^Version: / { v = substr($0,10) }
  /^SHA256: / {
      c = substr($0, 9)
      if(file==1) C[c]
      else if(!(c in C))
        printf "Package: %s (%s) SHA256 %s not found in repo\n", p, v, c
}' <(curl [repo-file]) [address-of-local-repo-file]

This User Gave Thanks to Chubler_XL For This Post:
# 6  
That worked! Thank you!
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #717
Difficulty: Medium
A universal Turing machine can calculate any recursive function, decide any recursive language, and accept any recursively enumerable language.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

If statement to compare two strings

Hi, I am trying to do the following to see if "ip" is already present in a file. if ; then echo "hi" else echo "hello" fi I am seeing errors on the if statement. Can someone please correct the syntax for me? Thanks (2 Replies)
Discussion started by: waince
2 Replies

2. AIX

SHA-256-Base 64 Encryption

Hello Guys, I was trying to have an SHA256 encryption which further be encrypted into base 64 using AIX unix command shasum -a 256. What I found in this is my output is different than a website: "online-convertcom" Actually conversion from website is exactly matching my requirements but... (4 Replies)
Discussion started by: Krunal Patel
4 Replies

3. UNIX and Linux Applications

How to make ldappasswd use {SHA} instead of {SSHA} for users passwords in openldap?

Is it possible to use {SHA} with ldappasswd? I didn't find responsible option in manual page and doc (1 Reply)
Discussion started by: urello
1 Replies

4. Shell Programming and Scripting

Compare strings with space in if statement

DEV> vi test_if_statement.sh "test_if_statement.sh" 9 lines, 205 characters proc_out="Normal completion" proc_out_comp="Normal completion" echo 'proc_out:'$proc_out echo 'proc_out_comp:'$proc_out_comp if then echo 'match' else echo 'no_match' fi ~ ~ ~ ~ ~ ~ ~ ~ ~ (4 Replies)
Discussion started by: cartrider
4 Replies

5. Linux

Convert MD5 password to SHA-512?

Hi, Is it possible to convert MD5 passwords to SHA-512? I'm about to migrate an old slackware server to Debian, then I noticed that they don't use same encryption method. I'm aware that I can change the encryption method in Debian to MD5, but as far as I understand SHA-512 is more secure,... (2 Replies)
Discussion started by: urandom
2 Replies

6. Debian

Repositories in sources.list

I'm just interested to know how your sources.list look like. I got some repositories witch give some errors and I would like to clean it up. and when I do apt-get update I get few lines showing errors like 404 , this is how my list look like: # deb cdrom:/ squeeze main # deb cdrom:/... (0 Replies)
Discussion started by: zdorian
0 Replies

7. Shell Programming and Scripting

awk if statement to evaluate string and compare

I have the following simplified code that I am planning on putting into a larger shell script. I have been butchering it to try and make work amongst google searches and reading awk documentation. amixer sset Master toggle | awk '{ if ( /^ Front Left/ { print $7 } == // ) print "MUTED" }'I... (2 Replies)
Discussion started by: jelloir
2 Replies

8. Shell Programming and Scripting

Compare files column to column based on keys

Here is my situation. I need to compare two tab separated files (diff is not useful since there could be known difference between files). I have found similar posts , but not fully matching.I was thinking of writing a shell script using cut and grep and while loop but after going thru posts it... (2 Replies)
Discussion started by: blackjack101
2 Replies

9. Shell Programming and Scripting

AWK statement formatting assistance

I am writing a script that ssh's out to our various servers and extracts diskspace info to generate into a report. With the mix of servers linux/solairs 8-10/AIX the easiest way is to use df -k (though I much rather prefer df -h). I have pasted the relevant code: dfdata=`ssh -q -o... (1 Reply)
Discussion started by: rkruck
1 Replies

10. Shell Programming and Scripting

Very urgent :- How to compare string using if statement

Hi How can i compare a string using if statement in a script? For eg: I have filename="abc.sh" if ;then { ....... ....... } fi but this doesnot work .. How will i execute this ?? Thanks in advance (1 Reply)
Discussion started by: jisha
1 Replies

Featured Tech Videos