Pages

Sunday, September 26, 2021

Shell Scripting: Tidbits #3

[1] Check if the content of file X is in another file Y

One option is to rely on comm utility to compare common lines in both files. comm requires both files to be sorted.

comm utility produces three text columns as output -> lines found only in file1, lines found only in file2 and lines found in both files. In order to check the existence of file X's content in file Y, simply run comm command with sorted conent of both files and suppress first two columns of output. Then simply match the line count from the output with the line count of file X.

eg.,

$ cat /tmp/fileX
Oh, yes I can make it now the pain is gone
All of the bad feelings have disappeared

$ cat /tmp/fileY
Gone are the dark clouds that had me blind
It's gonna be a bright bright
Bright bright sunshiny day
It's gonna be a bright bright
Bright bright sunshiny day
Oh, yes I can make it now the pain is gone
All of the bad feelings have disappeared
Here is that rainbow I've been praying for
It's gonna be a bright bright

$ comm -12 <(sort -u fileX) <(sort -u fileY)
All of the bad feelings have disappeared
Oh, yes I can make it now the pain is gone

$ comm -12 <(sort -u fileX) <(sort -u fileY) | wc -l
       2	<== number of lines common in both files

$ wc -l fileX
       2 fileX	<== numer of lines in source file

In above example, the numer of lines in source file match with the number of common lines in both files - so, we can assume that the content of file X is found in file Y.

To be clear, this is not really fool-proof but may work in majority of cases.

<(command) syntax invokes process substitution. Perhaps it is a topic for another post.

[2] Checking shell script syntax without running it

Specify -n option. No commands will be executed in this "noexec" mode.

bash -n <script>
sh -n <script>

eg.,

$ cat -n hello.sh 
     1	#!/bin/bash
     2	echo 'Hi Hola
     3	echo "Ni Hao Namaste"

Syntax Check

$ bash -n hello.sh 
hello.sh: line 2: unexpected EOF while looking for matching `''
hello.sh: line 4: syntax error: unexpected end of file

Execute to confirm

$ ./hello.sh 
./hello.sh: line 2: unexpected EOF while looking for matching `''
./hello.sh: line 4: syntax error: unexpected end of file

No comments:

Post a Comment