Reputation: 1141
I have a csv file with some data in it. I need to search the values in the second column for any strings less than or equal to 4 characters in length and then return the matching line.
some.csv File:
MA,BEVM3,BEVERLY,52,31
VT,EXJV1,ESSEX JUNCTION N,49,29
ME,FISM1,FT KENT,41,20
MA,OXFM3,BUFFUMVILLE LAKE,52,30
MA,TLLM3,TULLY LAKE,52,28
NH,MNCN3,MASSABESIC LAKE,52,31
ME,GREM1,SEBEC LAKE,45,23
ME,CLTM1,CLAYTON LAKE,42,19
ME,GRAM1,GRAND LAKE STREAM,46,27
VT,SLNV1,SOUTH LINCOLN,45,26
NH,MCDN3,EDWARD MACDOWELL LAKE,49,30
MA,BOS,BOSTON,51,37
MA,BROM3,BROCKTON,53,32
MA,CHH,CHATHAM,47,36
MA,ORH,WORCESTER,50,33
ME,KGYX,GRAY,48,30
MA,AQW,N ADAMS HARRIMAN AP,52,30
MA,KTAN,TAUNTON MUNI AP,54,32
MA,KPYM,PLYMOUTH MUNI AP,51,32
Code:
awk -F',' '$2<=4' some.csv
This is not returning what I'm expecting... Is there a better way to perform this task?
Upvotes: 0
Views: 76
Reputation: 92854
Alternative approach using sed tool:
sed -n '/^[^,]*,[^,]\{1,4\},/p' some.csv
The output:
MA,BOS,BOSTON,51,37
MA,CHH,CHATHAM,47,36
MA,ORH,WORCESTER,50,33
ME,KGYX,GRAY,48,30
MA,AQW,N ADAMS HARRIMAN AP,52,30
MA,KTAN,TAUNTON MUNI AP,54,32
MA,KPYM,PLYMOUTH MUNI AP,51,32
The same can be achieved using grep tool:
grep '^[^,]*,[^,]\{1,4\},' some.csv
Upvotes: 0
Reputation: 153
You can use bash if you need. Using a loop and an if codition like:
#!/bin/bash
filename="/root/some.csv"
while read -r line
do
value=`echo $line | awk -F ',' '{print $2}' | wc -c`
value=$((value - 1))
if [ $value -lt 5 ]
then
echo $line
fi
done < "$filename"
Upvotes: 0
Reputation: 3147
try this -
awk -F, '{if(length($2) <= 4) print $0}' f
MA,BOS,BOSTON,51,37
MA,CHH,CHATHAM,47,36
MA,ORH,WORCESTER,50,33
ME,KGYX,GRAY,48,30
MA,AQW,N ADAMS HARRIMAN AP,52,30
MA,KTAN,TAUNTON MUNI AP,54,32
MA,KPYM,PLYMOUTH MUNI AP,51,32
Upvotes: 2