I tried this code but do not get my desired output
Code:
counter=0;
for file in `cat FILE1.txt | awk -F'[/_.]' '{print $3$4$5$6}'`
do
x=`echo "$file"`
while read eachline
do
y=`echo "$eachline" | cat temp.txt | awk -F'[/_.]' '{print $1$2$3$4}'`
if [ "$x"=="$y" ]
then
cp -v $file /home/imran/Script/data
counter=$((counter+1))
break
fi
done < FILE2.txt
echo $counter
done
I have tried in this way also
Code:
counter=0;
for f in `awk 'NR>2{print}' FILE1.txt`
do
f3=$(echo $f|awk -F'/' '{print $2}');
f6=$(echo "${f3%%.*}");
for g in `awk 'NR>=1{print}' FILE2.txt`
do
if [ "$f"=="$g" ]
then
cp $f /home/imran/Script/data
counter=$((counter+1))
break;
fi
done
echo $counter
done
Please help
Moderator's Comments:
Please use CODE (not ICODE) tags as required by forum rules!
Last edited by RudiC; 08-19-2016 at 06:45 AM..
Reason: Changed ICODE tags.
Could you please let me know if following may help you here.
Code:
awk 'NR == FNR #### NR and FNR are the awk's inbuilt variables so condition NR==FNR willbe TRUE only when first file(file2) here will be read. Because FNR's value will be reset whenever a new file is being read but NR's value will be keep on increasing till the all files will be completed reading.
{T[$1]; #### creating an array named T whose value is $1(first field).
next} #### putting next(awk's inbuilt keyword) to skip all further statements now.
#### All following statements will be read when second file named file1 is being read.
{FN = $0; #### creating a variable named FN whose value is $0(complete line).
gsub (/^.*\/|.txt$/, _)} #### gsub(awk's in-built functionality to globally subtitute the pattern in any line or variable, line here in this case. It will globally subsitutue everything till / (as per your requirement) with NULL.
$0 in T #### Now every line(which is formed by above subsitute command now) is present in array named T(which was created while file2 was getting read in NR==FNR condition).
{system ("echo cp " FN " /some/where") #### using system command(which is use to execute shell commands inside awk) executing echo command which will write the actually commands which we want to perform like cp source_file Target_file in this case.
}' file2 file1 #### Mentioning Input_files named file2 and file1 here.
Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
awk '
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 in FN variable
gsub (/^.*\/|.txt$/, _) # remove leading path info and ".txt" ext. from file name
}
$0 in T {system ("echo cp " FN " /some/where") # IF the reduced file name is found in pattern array T, run the
# system command to cp FN (full file path) to destination (echo inserted for safety)
}
' file2 file1
Each call to system() in awk will invoke a shell which will then invoke cp. If there are 6000 files to be copied, invoking one shell for the copies instead of 6000 should be considerably faster. Consider this small change to RudiC's suggestion:
Code:
awk '
NR == FNR {T[$1]
next
}
{FN = $0
gsub (/^.*\/|.txt$/, _)
}
$0 in T {print "cp", FN, "/some/where"
}
' file2 file1 | sh
And, if the cp utility on your system has a -t destination_directory option (which is an extension not covered by the standards), you could make even more gains greatly reducing the number of times cp is invoked by using xargs:
Code:
awk '
NR == FNR {T[$1]
next
}
{FN = $0
gsub (/^.*\/|.txt$/, _)
}
$0 in T {print FN
}
' file2 file1 | xargs cp -t "/some/where"
These 2 Users Gave Thanks to Don Cragun For This Post:
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)