Compare two files when pattern matched


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Compare two files when pattern matched
# 8  
Old 08-19-2016
I considered that as well. cp, at least some versions, allows to copy multiple input files to a target directory. That could be done like
Code:
awk '
BEGIN           {printf "echo cp"                       # prepare shell statement
                } 
NR == FNR       {T[$1]                                  # for the first file (NR id. to FNR), collect the names to search in T array
                 next                                   # stop processing this line; read next one
                }
                {FN = $0                                # second file only: save total file path
                 gsub (/^.*\/|.txt$/, _)                # remove leading path info and ".txt" ext. from file name
                }
$0 in T         {printf " %s ", FN                      # IF the reduced file name is found in pattern array T, print the FN (full file path)
                }
END             {print " /some/where"                   # finish shell statement
                }
' file2 file1 | sh
cp ./5_April_2012_Page323.txt ./6_August_2012_Page328.txt ./10_February_2014_Sportz6.txt /some/where

It may overrun system limits if too many files are to be copied, though.
# 9  
Old 08-19-2016
Quote:
Originally Posted by RudiC
I considered that as well. cp, at least some versions, allows to copy multiple input files to a target directory. That could be done like
Code:
awk '
BEGIN           {printf "echo cp"                       # prepare shell statement
                } 
NR == FNR       {T[$1]                                  # for the first file (NR id. to FNR), collect the names to search in T array
                 next                                   # stop processing this line; read next one
                }
                {FN = $0                                # second file only: save total file path
                 gsub (/^.*\/|.txt$/, _)                # remove leading path info and ".txt" ext. from file name
                }
$0 in T         {printf " %s ", FN                      # IF the reduced file name is found in pattern array T, print the FN (full file path)
                }
END             {print " /some/where"                   # finish shell statement
                }
' file2 file1 | sh
cp ./5_April_2012_Page323.txt ./6_August_2012_Page328.txt ./10_February_2014_Sportz6.txt /some/where

It may overrun system limits if too many files are to be copied, though.
We could squeeze a few more source file operands into a cp command if we drop the leading ./ from the file operands:
Code:
$0 in T         {printf " %s.txt", $0                      # IF the reduced file name is found in pattern array T, print the filename

If imranrasheedamu tells us that cp -t target is not available and the above script fails with E2BIG errors, we could also make some simple modifications to the above script to put no more than x source file operands in each cp command where x is 50, 100, or some other conservative number based on the maximum filename length, the size of the combined environment variables, and ARG_MAX on the system. But I don't see any reason to spend the time to do that unless imranrasheedamu lets us know that it is needed.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

To print from the first line until pattern is matched

Hi I want to print the line until pattern is matched. I am using below code: sed -n '1,/pattern / p' file It is working fine for me , but its not working for exact match. sed -n '1,/^LAC$/ p' file Input: LACC FEGHRA 0 LACC FACAF 0 LACC DARA 0 LACC TALAC 0 LAC ILACTC 0... (8 Replies)
Discussion started by: Abhisrajput
8 Replies

2. Shell Programming and Scripting

Putting together substrings if pattern is matched

What I would like to do is if the lines with % have the same name, then combine the last 9 letters of the string underneath the last occurrence of that ID with the first 9 letters of the string underneath the first occurrence of that ID. I have a file that looks like this: %GOGG... (12 Replies)
Discussion started by: verse123
12 Replies

3. Shell Programming and Scripting

Matched a pattern from multiple columns

Hi, I need to extract an info in $1 based on a matched pattern in $2,$3,$4, and $5. The sample input file as follows:- ID Pat1 Pat2 Pro1 use1 add41 M M M add87 M M M M add32 ... (16 Replies)
Discussion started by: redse171
16 Replies

4. Shell Programming and Scripting

How to use sed to search a particular pattern in a file backward after a pattern is matched.?

Hi, I have two files file1.txt and file2.txt. Please see the attachments. In file2.txt (which actually is a diff output between two versions of file1.txt.), I extract the pattern corresponding to 1172c1172. Now ,In file1.txt I have to search for this pattern 1172c1172 and if found, I have to... (9 Replies)
Discussion started by: saurabh kumar
9 Replies

5. Shell Programming and Scripting

Insert certain field of matched pattern line above pattern

Hello every, I am stuck in a problem. I have file like this. I want to add the fifth field of the match pattern line above the lines starting with "# @D". The delimiter is "|" eg > # @D0.00016870300|0.05501020000|12876|12934|3||Qp||Pleistocene||"3 Qp Pleistocene"|Q # @P... (5 Replies)
Discussion started by: jyu3
5 Replies

6. Shell Programming and Scripting

Print only matched pattern in perl

Hi, I have script like below: #!/usr/local/bin/perl use strict; use warnings; while (<DATA>) { ( my ($s_id) = /^\d+\|(\d+?)\|/ ) ; if ( $s_id == 1 ){ s/^(.*\|)*.*ABC\.pi=(+|+)*.*ABC\.id=(\d+|+).*$/$1$2|$3/s; print "$1$2|$3\n"; (2 Replies)
Discussion started by: sol_nov
2 Replies

7. Shell Programming and Scripting

Grep word between matched pattern

would like to print word between matched patterns using sed for example : create INDEX SCOTT.OR_PK ON table_name(....) would like to print between SCOTT. and ON which is OR_PK Please help me out Thanks (4 Replies)
Discussion started by: jhonnyrip
4 Replies

8. Shell Programming and Scripting

removing lines around a matched pattern

I have an ugly conf file that has the string I'm interested in searching for in the middle of a block of code that's relevant, and I'm trying to find a way to remove that entire block based on the matched line. I've googled for this problem, and most people helping are only interested in... (9 Replies)
Discussion started by: tamale
9 Replies

9. Shell Programming and Scripting

Shell Scripting: Compare pattern in two files and merge the o/p in one.

one.txt ONS.1287677000.820.log 20Oct2010 ONS.1287677000.123.log 21Oct2010 ONS.1287677000.456.log 22Oct2010 two.txt ONS.1287677000.820.log:V AC CC EN ONS.1287677000.123.log:V AC CC EN ONS.1287677000.820.log:V AC CC EN In file two.txt i have to look for pattern which column one... (17 Replies)
Discussion started by: saluja.deepak
17 Replies

10. UNIX for Dummies Questions & Answers

Count of matched pattern occurance

In a file a pattern is occured many times randomly. Even it may appear more then once in the same line too. How i can get the number of times that pattern appeared in the file? let the file name is abc.txt and the pattern is "xyz". I used the following code: grep -ic "xyz" abc.txt but it is... (3 Replies)
Discussion started by: palash2k
3 Replies
Login or Register to Ask a Question