Grep command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep command
# 1  
Old 03-21-2017
Grep command

Hi All,

I have a directory of simulation data files with structure dump*.data and an example of such data file is given below.

Code:
ITEM: TIMESTEP
10000
ITEM: NUMBER OF ATOMS
6
ITEM: BOX BOUNDS ff ff ff
-0.15 0.15
0 0.5
-0.15 0.15
ITEM: ATOMS id type x y z vx vy vz fx fy fz omegax omegay omegaz radius c_nconts 
1 1 -0.0506691 0.371195 -0.0540098 0 -1 -0 0 0 0 0 0 0 0.03 0 
4 2 -0.0400495 0.270148 0.0120722 0 -1.25925 0 0 -0.345173 0 0 0 0 0.02 0 
2 1 -0.0102719 0.415304 0.0113916 0 -1 -0 0 0 0 0 0 0 0.01 0 
6 2 0.0192567 0.33773 0.0256545 0 -1 -0 0 0 0 0 0 0 0.01 0 
3 1 0.0371105 0.373507 -0.00483919 0 -1 -0 0 0 0 0 0 0 0.02 0 
5 2 0.0426929 0.366908 0.057645 0 -1 -0 0 0 0 0 0 0 0.03 0

I have made up the script below which filters specific number in the first column and read thorough in all the data files

Code:
grep -h "^$1 " dump[1-9]????.data > particle$1.dat 
grep -h "^$1 " dump[1-9]?????.data >> particle$1.dat
grep -h "^$1 " dump[1-9]??????.data >> particle$1.dat

Now I want the code to read first the second row (10000 in this case) and append it as the first column of the results of the current code. Row 2 in the data files have values of 10000, 20000, 30000,...1790000,1800000. For example, if I read for row which starts with 4, I want the output to be

Code:
10000 4 2 -0.0400495 0.270148 0.0120722 0 -1.25925 0 0 -0.345173 0 0 0 0 0.02 0

Thank you.

Last edited by Theo Score; 03-21-2017 at 01:02 AM..
# 2  
Old 03-21-2017
You haven't told us what operating system or shell you're using, and grep is not capable of joining text from different lines in a file. For that you need something more like awk. For example:
Code:
#!/bin/ksh
IAm=${0##*/}
if [ $# -ne 1 ]
then	printf 'Usage: %s column_1_value\n' "$IAm" >&2
	exit 1
fi
awk -v pattern="^$1 " '
FNR == 2 {
	line2 = $0
	next
}
$0 ~ pattern {
	print line2, $0
}' dump[1-9]????.data dump[1-9]?????.data dump[1-9]??????.data > particle"$1".dat

Although written and tested using a Korn shell, this will also work with any shell that meets basic POSIX shell requirements for parameter expansions and uses Bourne shell syntax.

If you want to try this on a Solaris/SunOS system, change awk in this script to /usr/xpg4/bin/awk or nawk.
# 3  
Old 03-21-2017
Is it always the line starting with 4 as identifier when to join this line with the 2nd? Or is there any other kind of criteria which line to join with the 2nd?
# 4  
Old 03-21-2017
Thank you Don,

I am using a bash shell (#!/bin/bash) and would appreciate your help.

Thank you, Theo
# 5  
Old 03-21-2017
Quote:
Originally Posted by Theo Score
Thank you Don,

I am using a bash shell (#!/bin/bash) and would appreciate your help.

Thank you, Theo
Hi Theo,
Help with what?

What operating system are you using?

Did you try the script I suggested (using either ksh or bash)? In what way did it fail to do what you wanted?
# 6  
Old 03-21-2017
Hi Don,

I am using Linux RedHat. I tried the script with both ksh and bash with the new script as;

Code:
#!/bin/bash
IAm=${0##*/}
if [ $# -ne 1 ]
then	printf 'Usage: %s column_1_value\n' "$IAm" >&2
	exit 1
fi
awk -v pattern="^$1 " '
FNR == 2 {
	line2 = $0
	next
}
$0 ~ pattern {
	print line2, $0
}' dump[1-9]????.data dump[1-9]?????.data dump[1-9]??????.data > particle"$1".dat

And I got the error

Code:
./script.sh: /bin/bash^M: bad interpreter: No such file or directory

But this script is in the same directory where I have the data files.

Thank you.
# 7  
Old 03-21-2017
BSD, Linux, and UNIX systems shells expect the script that they read to be text files consisting of zero or more lines each line of which is terminated by a <newline> character. At least the first line in your script is terminated by a <carriage-return><newline> character pair which is what one would expect in a DOS/Windows text file. The error message is telling you that your operating system can't find a file named /bin/bash<carriage-return> (where <carriage-return> is the ASCII <CR> carriage return character).

Please get rid of the <carriage-return> characters in your script, and try running it again.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Help on grep command

for example i have a directory home/solaris/unix/samplefiles/ with defaults files in it.. those default files have 1 word in common "UNIX". how can i list the files without "UNIX" words in it using grep command thanks, im using unix solaris, korn shell.. (1 Reply)
Discussion started by: daveaztig14
1 Replies

2. Shell Programming and Scripting

Grep command giving different result for different users for same command

Hello, I am running below command as root user #nodetool cfstats tests | grep "Memtable switch count" Memtable switch count: 12 Where as when I try to run same command as another user it gives different result. #su -l zabbix -s /bin/bash -c "nodetool cfstats tests | grep "Memtable switch... (10 Replies)
Discussion started by: Pushpraj
10 Replies

3. Shell Programming and Scripting

Grep command

grep -i -f panel_genes.txt hg19_refGene.txt > match.txt seems to be pulling names the do not exist in the input file (panel_genes.txt) - the output is attached as well (match.txt) For example, RNF185 or ZNF146 are not genes in the input. I am trying to match the input file genes only and am... (9 Replies)
Discussion started by: cmccabe
9 Replies

4. Shell Programming and Scripting

help on grep command...

Hi I have lots of file in on folder and i want to egrep from only few files. List of files...... Polt_KJ_430_OutputRBS_istUt_CR2.log Polt_KN_4122_OutputRBS_ncChk_CR.log Polt_LN_2230_OutputRNC_Hth_CLKLKL.log Solt_KJ_430_OutputRBS_istUt_CR2.log Solt_KN_4122_OutputRBS_ncChk_CR3.log... (2 Replies)
Discussion started by: asavaliya
2 Replies

5. Shell Programming and Scripting

Grep Command

Hi, I have around 500 Text files and Each file will be having either String1 or String2. I want to list the file only which has String1 and Sting2 in a single command.. (5 Replies)
Discussion started by: balasubramani04
5 Replies

6. Shell Programming and Scripting

Help with using grep command with copy command

Hi, im taking an entry Unix class, and as part of my lab assignment I have to copy all files in the /home/david/lab3 directory that have the file extension .save to your lab3/temp directory. I'm having trouble getting the grep to do anything worth while I've been trying to do: cp... (6 Replies)
Discussion started by: Critical jeff
6 Replies

7. Shell Programming and Scripting

can anyone help with shell script command about searching word with grep command?

i want to search in the current directory all the files that contain one word for example "hello" i want to achieve it with the grep command but not with the grep * (2 Replies)
Discussion started by: aintour
2 Replies

8. UNIX for Advanced & Expert Users

how to exclude the GREP command from GREP

I am doing "ps -f" to see my process. but I get lines that one of it represents the ps command itself. I want to grep it out using -v flag, but than I get another process that belongs to the GREP itself : I would like to exclude # ps -f UID PID PPID C STIME TTY TIME CMD... (2 Replies)
Discussion started by: yamsin789
2 Replies

9. UNIX for Dummies Questions & Answers

grep command

hi all i have directory /usr under this directory i have subdirectories tmp1,tmp2,tmp3 like this /usr/tmp1 /usr/tmp2 /usr/tmp3 and so on i want to search string in files (i don't know the name of the files)and i want to serch it in all the directories under the /usr how shell i do... (3 Replies)
Discussion started by: naamas03
3 Replies

10. Shell Programming and Scripting

grep command

What is the meaning of this grep -v $object grant_BU.sql>temp (1 Reply)
Discussion started by: debasis.mishra
1 Replies
Login or Register to Ask a Question