How to ignore Case with in COMM command?

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to ignore Case with in COMM command?
# 1  
Old 01-23-2017
How to ignore Case with in COMM command?

Hi,

How can i ignore case between 2 files in unix using COMM command.
2 input files are:
Code:
-bash-4.1$ more x2.txt
HELLO
hi
HI
raj

-bash-4.1$ more x3.txt
hello
hi
raj

COMM command:
Code:
-bash-4.1$ comm x2.txt x3.txt
        hello
HELLO
                hi
HI
                raj


Here hello/HELLO should come in 3rd column as both words are same.How to achieve this as in help there are no ignoring case option

Last edited by Don Cragun; 01-23-2017 at 03:34 AM.. Reason: Add CODE and ICODE tags.
# 2  
Old 01-23-2017
Have you tried using tr to create copies of both of your input files with all uppercase characters converted to lowercase and the using comm on the converted files?
# 3  
Old 01-23-2017
For comm to work correctly the files have to be sorted. Capital letters and lowercase letters are different when sorted - just so you know. UNIX does not ignore case differences by default, except for some commands that allow an option to ignore case.

It occurred to me that Don's good suggestion might be beyond what you know how to do. So here is one way to to use the tr command to feed the comm command in bash -

Code:
comm <( tr -s '[:upper:]' '[:lower:]' < x2.txt)  <(tr -s '[:upper:]' '[:lower:]' < x3.txt)

The <( ) thing is called process substitution in bash.

Syntax is
Code:
<( command string goes here, it must produce output )

You can have a >( ) or a <( ) combination of angle brackets and parentheses.
# 4  
Old 01-23-2017
As Jim said, comm needs both input files to be sorted. After case-shifting both of your sample input files to lowercase, they happen to be in sorted order. If that is not the case with your real data files, you will also need to sort them after shifting to lowercase.

I don't think you want the tr -s option. That suppresses repeated adjacent occurrences of the same character in the output. (For example:
Code:
echo HELLO | tr -s '[:upper:]' '[:lower:]'

would produce the output:
Code:
helo

note the LL in the input and the single l in the output.)

The process substitution feature Jim suggested is available in bash, some recent versions of ksh, and a few other shells; but it is not in the standards and is not available in many other shells. If you're using a shell that just supports POSIX standard features (and your input might need to be sorted), you could try something more like:
Code:
tr '[:upper:]' '[:lower:]' < x2.txt | sort > $$.2.txt
tr '[:upper:]' '[:lower:]' < x3.txt | sort > $$.3.txt
comm $$.[23].txt
rm -f $$.[23].txt

which creates copies of your input files that have been converted to lowercase and sorted, runs comm on the copies, and then removes the copies.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Merge strings with ignore case

I have a bi-lingual database of a large number of dictionaries. It so happens that in some a given string is in upper case and in others it is in lower case. An example will illustrate the issue. toll Tax=पथ-कर Toll tax=राहदारी कर toll tax=टोल I want to treat all three instances of toll tax... (3 Replies)
Discussion started by: gimley
3 Replies

2. UNIX for Dummies Questions & Answers

Is there a way to ignore CAPS or case sensitivity?

If I'm using a program that is expecting certain filenames and directories to be all CAPS, isn't there a way to ignore this in linux/cshell scripting? I.e., similiar to ignoring spaces with " (i.e., directory is directory 1, can ignore by typing "directory 1".) ?? (2 Replies)
Discussion started by: rebazon
2 Replies

3. Shell Programming and Scripting

simple but challenging ignore case

Folks - I found this code on the forums to extract a paragraph for a matching pattern but I don't know how to make it ignore case. grep "-ip" is not an option for me as I am on SUSE LINUX. Thanks for ur help. I run this script as below: grep_para.ksh sqlstate < logfile "The end result... (2 Replies)
Discussion started by: beowulfkid
2 Replies

4. Shell Programming and Scripting

To ignore user input case.

hi, i will like to know whether awk command can ignore case? i written a script that will take in user input and search for data on the 1st field from a text file. echo -n "Title:" read title awk -F":" '$1~/'"$title"'/{print $0}' Filename read ans return ... (5 Replies)
Discussion started by: Cheranime
5 Replies

5. Shell Programming and Scripting

how to ignore case

Hi All, The means I use to ignore case, as an example is the following snippet: It should accept any oof the following y|Y|YES|Yes|n|N|NO|No echo "Enter Y/N to continue: " read choice; (3 Replies)
Discussion started by: raghur77
3 Replies

6. Programming

Ignore case in a test?

How do I ignore the case in an if condition..? EDIT: I put this in the wrong board...this is a linux script. if then echo "Same name." else echo "Different name." fi (1 Reply)
Discussion started by: Bandit390
1 Replies

7. Shell Programming and Scripting

How do I ignore one character in a case statement? PLEASE HELP!

Hello, I am new to this forums. I need help with shell, and ksh in particular. I have a case statement that does something if -k. So it looks like: case $arg in -k) PUT=y, SEND=1 Thats all good and dandy. But now I want to change it where whether or not the user puts -k or not, it will do... (2 Replies)
Discussion started by: cpunisher
2 Replies

8. Shell Programming and Scripting

comm not working for this case. HELP!

I have two sorted files. newfile has records like: aaa|bbb|ccc||| ddd||eee|fff|| oldfile has records like: aaa|bbb|ccc| ggg||hhh|fff The output should like: ddd||eee|fff|| I use comm but it's not working for this case. comm -2 -3 newfile oldfile > difffile The difffile is the... (6 Replies)
Discussion started by: sslr
6 Replies

9. Shell Programming and Scripting

Ignore case sensitive in Case Switch

In a Case switch, how to ignore case sensitive in the test: e.g. case "$field" in "TEST) action1;; *) action2;; esac How to go in action1 in case of $field = TEST , or Test , or test or .... without enumerating all possibilities... Thanks,... (1 Reply)
Discussion started by: annelisa
1 Replies

10. Shell Programming and Scripting

Ignore Case in Shell

Hi New to this Unix dot com. I would like to know how i can ignore the case in filename which is getting as user directoty to shell script. For Ex: Source (/aa/bb/patch/) Directory may contains more than 1 files as like 1. aa.csv or Aa.csv or AA.csv or aa.CSV 2. bb.csv 3. ... (3 Replies)
Discussion started by: AAH
3 Replies
Login or Register to Ask a Question