Score:-3

Extracting a row using sed

bd flag

I was just wondering how would I extracted a specific row using sed?(My system has sed installed, so no awk unfortunately :( ). I got a text file like the following:

Business Name,Description,Address,Postal Code,Email,Phone,Fax,Web Site,City,Latitude,Longitude,Keywords,Mailing Address,Indigenous Ownership,Region,Type,Industry Sector,Year Formed,Number of Employees,Primary Contact,Contact Title,Twitter,Facebook,When Updated
Duz Cho Construction LP,"Duz Cho Construction is an earthworks construction company doing site development, road access, and reclamation for the oil and gas, wind energy, mining and other civil works construction within the traditional territory of McLeod Lake Indian Band.",4821 South Access Road,V0C 1J0,[email protected],250-788-3120,250-788-3188,https://duzcho.com/duz-cho-construction/,Chetwynd,55.6963381,-121.6266684,Duz Cho Construction LP  23  Construction,"4821 South Access Road, Chetwynd, BC V0C 1J0",TRUE,Northeast,Community Owned Company,23  Construction,2002,55 to 99,Jacob Albertson,General Manager,,https://www.facebook.com/DuzChoConstruction/,2012-04-15
Gilwa Consulting Inc.,"Gilwa Consulting Inc. (GCI) is an Indigenous owned and operated business that provides advisory services for all participants in the construction industry engaged in developing, implementing, and/or executing on contractual agreements between Indigenous peoples, industry (EPC, EPCM, Contractors), and/or government.",710 Ruston Road,V1X3Y2,[email protected],778-215-1888,,http://www.gilwaconsulting.com,Kelowna,49.8804877,-119.4070893,"Gilwa Consulting Inc. 54  Professional, scientific and technical services","710 Ruston Road, Kelowna, BC V1X 3Y2",TRUE,Thompson / Okanagan,Private Company,"54  Professional, scientific and technical services",2019,1 to 4,Thomas Nyce,Director,,,2021-04-14
HSI  Hobbs Strategic Insights,"Offering a full suite of strategic planning, business consultation, corporate communications and success & inclusion coaching services, HSI works with you to manifest transformational initiatives from conception to implementation. HSI is a leader in Indigenous reconciliation work, and diversity & inclusion initiatives for corporate entities.",,V3M 0J4,[email protected],604-626-8296,,https://strategicinsights.ca,,,,"HSI  Hobbs Strategic Insights 54  Professional, scientific and technical services",,TRUE,Lower Mainland / Southwest,Private Company,"54  Professional, scientific and technical services",2021,1 to 4,Sasha Hobbs,Principal Strategist,,,2021-04-14
Bigfoot Donuts,"Bigfoot Donuts is a locally owned and operated bakery and caf in the heart of Downtown Courtenay. Specializing in handcrafted, made from scratch, quality, coffee and donuts, with a side of fun.",463 A 5th Street,V9N 1J7,[email protected],250-871-6603,,https://www.bigfootdonuts.com/,Courtenay,49.6902502,-125.0032691,Bigfoot Donuts 72  Accommodation and food services,"463 A 5th Street, Courtenay BC V9N 1J7",TRUE,Vancouver Island and Coast,Private Company,72  Accommodation and food services,2017,5 to 9,Lyndsey Bell,Owner,,https://www.facebook.com/Bigfoot.Donuts/,2021-04-14
Refocus Communications & Fundraising,"Refocus helps non-profit organizations more deeply engage their community and supporters so that, together, they can do great things in the world.
We work with charities across Canada, helping them build fundraising programs with an engagement and communications focus.","20543 96 Ave., Unit 31",V1M 3W3,[email protected],778.875.3439,,http://www.refocuscommunications.com,Langley ,49.1776159,-122.6564416,Refocus Communications & Fundraising 81  Other services (except public administration),"20543 96 Ave., Unit 31, Langley, BC V1M 3W3",TRUE,Lower Mainland / Southwest,Private Company,81  Other services (except public administration),2017,1 to 4,Aime Lindenberger,"CEO, Chief Engagement Officer",,,2021-03-31
Turtle Island Connections,"Turtle Island Connections curates Subscription boxes filled with Indigenous creations. Our box, the Turtle Shell, focuses on our spiritual, mental, emotional, and physical well-being. Each Shell contains Indigenous art, Cultural teachings, Nourishment, Self-care products and Donation to the Vancouver Aboriginal Health Society.",3139 Brandt Crescent,V9L 6W6,[email protected],250.710.7685,,https://www.turtleislandconnections.ca,Duncan,48.7633914,-123.7137629,Turtle Island Connections 44-45  Retail trade,"3139 Brandt Crescent, Duncan BC V9L 6W6",TRUE,Vancouver Island and Coast,Partnership,44-45  Retail trade,2021,1 to 4,Lindsay Myers,Co-Founder,,https://www.facebook.com/TurtleIslandConnections,2021-03-31
Bulkley Valley Roofing Ltd,"Specializing in Commercial, Industrial and Residential Roofing. Fully certified and insured for hot roofing work. Red-seal Journeymen staffed.","Unit 3-3167 Tatlow rd, ",V0J 2N0,[email protected],250-846-9446,250-846-9440,,Smithers,54.7698334,-127.143943,Bulkley Valley Roofing Ltd 23  Construction,"Unit 3-3167 Tatlow rd, Smithers BC V0J 2N0",TRUE,North Coast,Development Corporation,23  Construction,2000,5 to 9,Murray Olivier,Owner/operator,,,2021-03-31
North Coast Helicopters,Northcoast Helicopters provides experienced long-line pilots who are seasoned in diamond drill support and mountain flying. Northcoast Helicopters provides wildfire fighting services to various private and government agencies.,2555 Seal Cove Road unit 123,V8J 3P6,[email protected],250-631-6031,,http://www.northcoasthelicopters.com,Prince Rupert,54.3369741,-130.3125632,"North Coast Helicopters 21  Mining, quarrying, and oil and gas extraction","2555 Seal Cove Road unit 123, Prince Rupert BC V8J 3P6",TRUE,North Coast,Private Company,"21  Mining, quarrying, and oil and gas extraction",2005,5 to 9,Kristen,Owner,,,2021-03-31
Park West Professional Services,Call Center,"Suite 811, 100 Park Royal, Suite 200",V7T 1A2,[email protected],604-210-1483,,,West Vancouver,49.3251879,-123.1358334,"Park West Professional Services 54  Professional, scientific and technical services","100 Park Royal, Suite 200, West Vancouver, BC V7T 1A2",TRUE,Lower Mainland / Southwest,Private Company,"54  Professional, scientific and technical services",2013,10 to 19,Matt Vickers,Owner,,,2021-03-31
Afterglow Hair Lounge,"Get your glow on. We strive to provide our guests the same quality one-on-one service small towns are renowned for, with the style, talent and professionalism of the city. We're proud to have been nominated and featured as some of the ""Best of Powell River"" stylists in 2017, 2018, 2019 and 2020 and have a shared dedication to maintain improve client experiences in years to come.  Look no further for the best wedding stylists of the upper Sunshine Coast  available year-round for events in-salon*, seven days a week. Come experience AfterGlow.",7075 Alberni Street,V8A2C2,[email protected],604.485.2075,, http://www.afterglowhairlounge.com,Powell River,49.8468725,-124.5196439,Afterglow Hair Lounge 81  Other services (except public administration),,TRUE,Vancouver Island and Coast,Private Company,81  Other services (except public administration),2011,5 to 9,Holly Barnes,Owner/operator,https://twitter.com/afterglowhair,https://www.facebook.com/AfterGlowHairLounge,2021-03-10
Dawson Analytics Inc.,"Dawson Analytics is a consulting company specializing in research development and design, data analysis and interpretation, and program/policy evaluation. Our company sources and analyzes data to provide our clients with powerful insights into their processes, outcomes and future endeavours.",22839 Gilbert Drive,V4R 0G4,[email protected],604.961.5129,,http://www.dawsonanalytics.com,Maple Ridge,49.2512469,-122.5874728,Dawson Analytics Inc.  51  Information and cultural industries,"22839 Gilbert Drive, Maple Ridge, BC V4R 0G4",TRUE,Lower Mainland / Southwest,Private Company,51  Information and cultural industries,2021,1 to 4,Stephanie Johnston,Vice President,,,2021-03-10

So basically I want something like the user will give three information: $1 which is the filename $2 which is the pattern $3 which is the year it was updated

Basically what I want to do is find all the entries that have a business name: first column that matches the pattern and of those entries I want the only the ones that match the specific year stated by $3. Also I want the following columns from the ones that match: Business Name, Description, Address, and When updated. I am kind of stuck because when I tried to extract the first column with a parameter it doesn't work??:

sed -E 's/([^,]*),'"$2"'/\1/' "$1"

Does not filter out anything??

pLumo avatar
in flag
Which Ubuntu does not come with `awk` preinstalled ?
hr flag
@pLumo should we start marking these "manipulating CSV with sed" questions as OT for that reason? there's been an outbreak of them recently both here and on U&L ex. [Unix - Sed Command Related](https://unix.stackexchange.com/questions/654757/unix-sed-command-related)
Yunfei Chen avatar
bd flag
@steeldriver wouldnt it make more sense to mark it as FAQ??
HuHa avatar
es flag
@pLumo: His CS professor's who gave him this as a homework assignment.
Score:4
in flag

sed or awk are both the wrong tools.


Your file is a Comma Separated Values (CSV) file, so it is best to use a proper csv parser:

csvgrep -c "Business Name" -m "$2" -c "When Updated" -m "$3" "$1"

Install via:

sudo apt install csvkit

As your fields you want to filter on happen to be the first and the last, you could possibly use grep, awk or sed:

awk -F, -v name_pattern="$2" -v year="$3" '$1~name_pattern && $NF~year' "$1"

or

sed -nE "/[^,]*$2.*$3-[0-9]{2}-[0-9]{2}\$/p" "$1"

or

grep -P "^[^,]*$2.*$3-[0-9]{2}-[0-9]{2}\$" "$1"

However, please note, that these solutions are very fragile and only work for your simple example. E.g. if one your Business Names had a comma, it would not work:

"Bla, Bla & sons"

Same, if you want to filter based on other fields.


A proper csv parser should always be preferred!

Yunfei Chen avatar
bd flag
If you need to install it doesnt it make it non portable??
hr flag
+1 not just preferred, essential in the OP's case since at least the `Mailing Address` and `Description` contain embedded commas and/or escaped double quotes ex. `[...] some of the ""Best of Powell River"" stylists in 2017, 2018, 2019 and 2020 [...]`
Score:0
in flag

By default sed doesn't filter, it edits and then prints the result, with or without any edit action.

If you want it to filter, then use the -n option to tell it to not print lines after editing them. Then, lines you do want to print, you put a p operator. For example:

sed -nE 's/match string/replace string/p'

Then only things that match and are successfully edited will be printed.

But also realize, anything on a matched line that not matched by the match string will be passed through intact and printed. So if you only want to print some parts of the line, your match string must match the whole line, and then the replace string only put back the parts you want to print (unless of course, you do want to print unmatched parts).

pLumo avatar
in flag
`sed` can filter lines very well.
pLumo avatar
in flag
But it shows substitution instead of simply `/pattern/p`.
user10489 avatar
in flag
I didn't say sed doesn't filter. I said it doesn't filter *by default* ... and if you want to filter without editing, grep is nice.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.