JPV
JPV

Reputation: 1079

BASH output from grep

I am relatively new to bash and I am testing my code for the first case.

counter=1
for file in not_processed/*.txt; do
  if [ $counter -le 1 ]; then
    grep -v '2018-07' $file > bis.txt;
    counter=$(($counter+1));
  fi;
done

I want to subtract all the lines containing '2018-07' from my file. The new file needs to be named $file_bis.txt.

Thanks

Upvotes: 0

Views: 123

Answers (3)

Abhijit Pritam Dutta
Abhijit Pritam Dutta

Reputation: 5591

I don't understood why you are using a counter and if condition for this simple requirement. Use below script which will fulfill you requirement:-

#first store all the files in a variable
files=$(ls /your/path/*.txt)
# now use a for loop
for file in $files;
do
  grep '2018-07' $file >> bis.txt
done

Better avoid for loop here as below single line is suffice

grep -h '2018-07' /your/path/*.txt >  bis.txt

Upvotes: 0

dhany1024
dhany1024

Reputation: 133

This is to do it on all files in not_processed/*.txt

for file in not_processed/*.txt
do
  grep -v '2018-07' $file > "$file"_bis.txt
done

And this is to do it only on the first 2 files in not_processed/*.txt

for file in $(ls not_processed/*.txt|head -2)
do
  grep -v '2018-07' $file > "$file"_bis.txt
done

Don't forget to add "" on $file, because otherwise bash considers $file_bis as a new variable, which has no assigned value.

Upvotes: 0

René Höhle
René Höhle

Reputation: 27295

With sed or awk it's much easier and faster to process complex files.

sed -n '/2018-07/p' not_processed/*.txt

then you get the output in your console. If you want you can pipe the output to a new file.

sed -n '/2018-07/p' not_processed/*.txt >> out.txt

Upvotes: 2

Related Questions