Sponsored Content
Top Forums Shell Programming and Scripting How to search for right word using awk? Post 302884744 by Corona688 on Tuesday 21st of January 2014 02:29:23 PM
Old 01-21-2014
This probably isn't robust enough to accept all your cases but hopefully is a good starting point.

I set RS=";" so each "line" read by awk is actually an entire table.
I set FS="," so each "column" is a different item separated by ,
I look for lines containing the string contained in the TABLE variable, which gets set to TABLE1
Then I mess around with gsub to insert extra commas where needed (otherwise some statements would have ID or FROM stuck onto them), and pretty up the whitespace so there aren't newlines and double spaces everywhere.

Finally I loop through all columns, and directly print the ones with CASE in them.

Code:
$ awk '/ID/ && ($0 ~ TABLE) {
        print "ID"
        gsub(/ID|FROM/, ",&,"); # Insert extra commas to break ID and FROM into their own tokens
        gsub(/[\r\n\t ]+/, " "); # Squash all whitespace into single spaces
        gsub(/, /, ","); # Remove spaces after commas
        for(N=1; N<=NF; N++) if($N ~ /CASE/) print $N; # Print all tokens containing CASE
}' FS="," RS=";" TABLE="TABLE1" inputfile

ID
CASE WHEN COL1 = 'Y' THEN '1' ELSE COL1 END
CASE WHEN COL2 = 'Y' THEN '1' ELSE COL2 END
CASE WHEN COL3 = 'Y' THEN '1' ELSE COL3 END
CASE WHEN COL4 = 'Y' THEN '1' ELSE COL4 END
CASE WHEN COL5 = 'Y' THEN '1' ELSE COL5 END (TITLE 'Field 5')
CASE WHEN COL6 = 'Y' THEN '1' ELSE COL6 END (TITLE 'Field 6')
CASE WHEN COL7 = 'Y' THEN '1' ELSE COL7 END (TITLE 'Field 7')

$


Last edited by Corona688; 01-21-2014 at 03:47 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Word search in awk

If I have data as below : 1,ABC,XXXX 2,ABC000,YYYY 3,DEF,AAAA 4,ABC0,ZZZZ I want to get records whose 2nd col exactly match with word 'ABC' I am using command below : awk -F"," '$2~/ABC/' Filename It is retrieving records as - 1,ABC,XXXX 2,ABC000,YYYY 4,ABC0,ZZZZ But in... (8 Replies)
Discussion started by: videsh77
8 Replies

2. Shell Programming and Scripting

How can i open a directory and search a word using awk....

Hi guys,I m new one in awk scripting....i want to search a word with in a directory...in that directory haviing many files...if i give a work ,it should open the directory and open each file for to search that particular word....is it possible in awk...tell me guys its really urgent.... (2 Replies)
Discussion started by: stalin2020
2 Replies

3. Shell Programming and Scripting

search a word and print specific string using awk

Hi, I have list of directory paths in a variable and i want to delete those dirs and if dir does not exist then search that string and get the correct path from xml file after that delete the correct directory. i tried to use grep and it prints the entire line from the search.once i get the entire... (7 Replies)
Discussion started by: dragon.1431
7 Replies

4. Shell Programming and Scripting

Search the word to be deleted and delete lines above this word starting from P1 to P3

Hi, I have to search a word in a text file and then I have to delete lines above from the word searched . For eg suppose the file is like this: Records P1 10,23423432 ,77:1 ,234:2 P2 10,9089004 ,77:1 ,234:2 ,87:123 ,9898:2 P3 456456 P1 :123,456456546 P2 abc:324234 (2 Replies)
Discussion started by: vsachan
2 Replies

5. UNIX for Dummies Questions & Answers

Script to search for a particular word in files and print the word and path name

Hi, i am new to unix shell scripting and i need a script which would search for a particular word in all the files present in a directory. The output should have the word and file path name. For example: "word" "path name". Thanks for the reply in adv,:) (3 Replies)
Discussion started by: virtual_45
3 Replies

6. Shell Programming and Scripting

To search a word in particular column using awk

I have a data in a file like this 1 praveen bmscollege 2 shishira bnmit 3 parthiva geethamce I want to search "praveen" using awk command i tried like this but i did not get awk `$2="praveen" {print $0} ` praveen.lst can anyone help me solving this problem in... (2 Replies)
Discussion started by: praveenhegde
2 Replies

7. Shell Programming and Scripting

Search for the word and exporting 35 characters after that word using shell script?

I have a file input.txt which have loads of weird characters, html tags and useful materials. I want to display 35 characters after the word description excluding weird characters like $$#$#@$#@***$# and without html tags in the new file output.txt. Help me. Thanx in advance. My final goal is to... (11 Replies)
Discussion started by: sachit adhikari
11 Replies

8. Shell Programming and Scripting

Search for the word and exporting 35 characters after that word using shell script

I have a file input.txt which have loads of weird characters, html tags and useful materials. I want to display 35 characters after the word "description" excluding weird characters like $&lmp and without html tags in the new file output.txt. Help me. Thanx in advance. I have attached the input... (4 Replies)
Discussion started by: sachit adhikari
4 Replies

9. Shell Programming and Scripting

Search for a specific word and print only the word from the input file

Hi, I have a sample file as shown below, I am looking for sed or any command which prints the complete word only from the input file. Ex: $ cat "sample.log" I am searching for a word which is present in this file We can do a pattern search using grep but I need to cut only the word which... (1 Reply)
Discussion started by: mohan_kumarcs
1 Replies

10. UNIX for Beginners Questions & Answers

How to search for a word in column header that fully matches the word not partially in awk?

I have a multicolumn text file with header in the first row like this The headers are stored in an array called . which contains I want to search for each elements of this array from that multicolumn text file. And I am using this awk approach for ii in ${hdr} do gawk -vcol="$ii" -F... (1 Reply)
Discussion started by: Atta
1 Replies
Text::Wrap(3pm) 					 Perl Programmers Reference Guide					   Text::Wrap(3pm)

NAME
Text::Wrap - line wrapping to form simple paragraphs SYNOPSIS
Example 1 use Text::Wrap; $initial_tab = " "; # Tab before first line $subsequent_tab = ""; # All other lines flush left print wrap($initial_tab, $subsequent_tab, @text); print fill($initial_tab, $subsequent_tab, @text); $lines = wrap($initial_tab, $subsequent_tab, @text); @paragraphs = fill($initial_tab, $subsequent_tab, @text); Example 2 use Text::Wrap qw(wrap $columns $huge); $columns = 132; # Wrap at 132 characters $huge = 'die'; $huge = 'wrap'; $huge = 'overflow'; Example 3 use Text::Wrap; $Text::Wrap::columns = 72; print wrap('', '', @text); DESCRIPTION
"Text::Wrap::wrap()" is a very simple paragraph formatter. It formats a single paragraph at a time by breaking lines at word boundaries. Indentation is controlled for the first line ($initial_tab) and all subsequent lines ($subsequent_tab) independently. Please note: $initial_tab and $subsequent_tab are the literal strings that will be used: it is unlikely you would want to pass in a number. Text::Wrap::fill() is a simple multi-paragraph formatter. It formats each paragraph separately and then joins them together when it's done. It will destroy any whitespace in the original text. It breaks text into paragraphs by looking for whitespace after a newline. In other respects it acts like wrap(). Both "wrap()" and "fill()" return a single string. OVERRIDES
"Text::Wrap::wrap()" has a number of variables that control its behavior. Because other modules might be using "Text::Wrap::wrap()" it is suggested that you leave these variables alone! If you can't do that, then use "local($Text::Wrap::VARIABLE) = YOURVALUE" when you change the values so that the original value is restored. This "local()" trick will not work if you import the variable into your own namespace. Lines are wrapped at $Text::Wrap::columns columns (default value: 76). $Text::Wrap::columns should be set to the full width of your output device. In fact, every resulting line will have length of no more than "$columns - 1". It is possible to control which characters terminate words by modifying $Text::Wrap::break. Set this to a string such as '[s:]' (to break before spaces or colons) or a pre-compiled regexp such as "qr/[s']/" (to break before spaces or apostrophes). The default is simply 's'; that is, words are terminated by spaces. (This means, among other things, that trailing punctuation such as full stops or commas stay with the word they are "attached" to.) Setting $Text::Wrap::break to a regular expression that doesn't eat any characters (perhaps just a forward look-ahead assertion) will cause warnings. Beginner note: In example 2, above $columns is imported into the local namespace, and set locally. In example 3, $Text::Wrap::columns is set in its own namespace without importing it. "Text::Wrap::wrap()" starts its work by expanding all the tabs in its input into spaces. The last thing it does it to turn spaces back into tabs. If you do not want tabs in your results, set $Text::Wrap::unexpand to a false value. Likewise if you do not want to use 8-character tabstops, set $Text::Wrap::tabstop to the number of characters you do want for your tabstops. If you want to separate your lines with something other than " " then set $Text::Wrap::separator to your preference. This replaces all newlines with $Text::Wrap::separator. If you just want to preserve existing newlines but add new breaks with something else, set $Text::Wrap::separator2 instead. When words that are longer than $columns are encountered, they are broken up. "wrap()" adds a " " at column $columns. This behavior can be overridden by setting $huge to 'die' or to 'overflow'. When set to 'die', large words will cause "die()" to be called. When set to 'overflow', large words will be left intact. Historical notes: 'die' used to be the default value of $huge. Now, 'wrap' is the default value. EXAMPLES
Code: print wrap(" ","",<<END); This is a bit of text that forms a normal book-style indented paragraph END Result: " This is a bit of text that forms a normal book-style indented paragraph " Code: $Text::Wrap::columns=20; $Text::Wrap::separator="|"; print wrap("","","This is a bit of text that forms a normal book-style paragraph"); Result: "This is a bit of|text that forms a|normal book-style|paragraph" SEE ALSO
For wrapping multi-byte characters: Text::WrapI18N. For more detailed controls: Text::Format. LICENSE
David Muir Sharnoff <muir@idiom.org> with help from Tim Pierce and many many others. Copyright (C) 1996-2009 David Muir Sharnoff. This module may be modified, used, copied, and redistributed at your own risk. Publicly redistributed versions that are modified must use a different name. perl v5.12.1 2010-04-26 Text::Wrap(3pm)
All times are GMT -4. The time now is 12:36 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy