awk or sed - Convert 2 lines to 1 line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk or sed - Convert 2 lines to 1 line
# 1  
Old 04-27-2012
awk or sed - Convert 2 lines to 1 line

Hi,

Just trying to get to grips with sed and awk for some reporting for work and I need some assistance:

I have a file that lists policy names on the first line and then on the second line whether the policy is active or not.

Code:
Policy Name:       Policy1
Active:            yes
Policy Name:       Policy2
Active:            yes
Policy Name:       Policy3
Active:            no
Policy Name:       Policy4
Active:            yes
Policy Name:       Policy5
Active:            no

What I'm trying to get to is a list of policy names and whether or not they are active on the same line:

Code:
Policy1 yes
Policy2 yes
Policy3 no
Policy4 yes
Policy5 no

Would appreciate any pointers.

Thanks.
# 2  
Old 04-27-2012
Code:
awk 'NR%2 {keep=$2; next}
       !NR%2 {print keep, $2} ' inputfile > outputfile

This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 04-27-2012
Or if you are having problems with awk.
Code:
while read a b
do
   read c d
   echo $b $d
done <inputfile

This User Gave Thanks to jgt For This Post:
# 4  
Old 04-27-2012
Hi.

An alternate with sed , cut , paste:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate combine lines fro specific column (field).

pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C sed cut paste

FILE=${1-data1}
pl " Input data file $FILE:"
cat -A $FILE

pl " Results of sed, cut, paste:"
sed 's/   */\t/g' $FILE |
cut -f2 |
paste - -

pl " Same thing, compressed with \"Process Substitution\":"
cut -f2 <( sed 's/   */\t/g' $FILE ) |
paste - -

exit 0

producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0.8 (lenny) 
bash GNU bash 3.2.39
sed GNU sed version 4.1.5
cut (GNU coreutils) 6.10
paste (GNU coreutils) 6.10

-----
 Input data file data1:
Policy Name:       Policy1$
Active:            yes$
Policy Name:       Policy2$
Active:            yes$
Policy Name:       Policy3$
Active:            no$
Policy Name:       Policy4$
Active:            yes$
Policy Name:       Policy5$
Active:            no$

-----
 Results of sed, cut, paste:
Policy1	yes
Policy2	yes
Policy3	no
Policy4	yes
Policy5	no

-----
 Same thing, compressed with "Process Substitution":
Policy1	yes
Policy2	yes
Policy3	no
Policy4	yes
Policy5	no

The sed converts 3 or more blanks to TABs, the cut extracts column (field) 2, and the paste combines 2 lines into one.

If the whitespace in the results does not show up on your display, rest assured that the tokens are separated by a TAB. You can copy and paste them to see it.

See man pages for details.

Best wishes ... cheers, drl

( edit 1: correct minor spelling errors )

Last edited by drl; 04-28-2012 at 12:25 PM..
These 3 Users Gave Thanks to drl For This Post:
# 5  
Old 04-28-2012
Code:
awk '{ORS=(ORS==RS)?FS:RS; print $NF}' infile

These 2 Users Gave Thanks to Scrutinizer For This Post:
# 6  
Old 04-28-2012
Using cat, cut, tr and paste:

Code:
cat filename|cut -d':' -f2|tr -d ' '|paste -s -d" \n" -

This User Gave Thanks to elixir_sinari For This Post:
# 7  
Old 04-28-2012
A perl:
Code:
perl -ne '/Policy Name:\s*(\S+)/;$pol=$1;print $pol." ".$1."\n" if /Active:\s*(\S+)/' infile

This User Gave Thanks to Klashxx For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk with sed to combine lines and remove specific odd # pattern from line

In the awk piped to sed below I am trying to format file by removing the odd xxxx_digits and whitespace after, then move the even xxxx_digit to the line above it and add a space between them. There may be multiple lines in file but they are in the same format. The Filename_ID line is the last line... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. Shell Programming and Scripting

Sed/awk command to convert number occurances into date format and club a set of lines

Hi, I have been stuck in this requirement where my file contains the below format. 20150812170500846959990854-25383-8.0.0 "ABC Report" hp96880 "4952" 20150812170501846959990854-25383-8.0.0 End of run 20150812060132846959990854-20495-8.0.0 "XYZ Report" vg76452 "1006962188"... (6 Replies)
Discussion started by: Chinmaya Kabi
6 Replies

3. Shell Programming and Scripting

Convert awk line into perl

I have an awk statement in a ksh script that looks for a certain string then looks at each line after to find another match. The match could be the next line or second down and it works well. nawk 'BEGIN {FS=RS;RS="!"} /interface loopback0/ {for(i=1;i<=NF; i++) if ($i ~ /ip... (5 Replies)
Discussion started by: numele
5 Replies

4. Shell Programming and Scripting

Replacing lines matching a multi-line pattern (sed/perl/awk)

Dear Unix Forums, I am hoping you can help me with a pattern matching problem. What am I trying to do? I want to replace multiple lines of a text file (that match a multi-line pattern) with a single line of text. These patterns can span several lines and do not always have the same number of... (10 Replies)
Discussion started by: thefang
10 Replies

5. UNIX for Dummies Questions & Answers

Awk: convert rows to columns every n lines

Hi guys! I use AWK commands under GAMS to predispose the data files to be read by GAMS. I have a file which contains groups of data I need. Unfortunately I have the data spread in 3 rows for each subject. Here's an example (the file is really long) 1 0 2.0956 100.00 250.00 100.00 2.0956... (4 Replies)
Discussion started by: Pintug
4 Replies

6. Shell Programming and Scripting

Summing over specific lines and replacing the lines with the sum using sed, awk

Hi friends, This is sed & awk type question. I have a text file which has numbers spread all over the file. I want to sum the series of numbers whenever i find it and produce an output file with the sum. For example ###start of input text file #### abc def ghi 1 2 3 4 kjld random... (3 Replies)
Discussion started by: kaaliakahn
3 Replies

7. Shell Programming and Scripting

sed or awk delete character in the lines before and after the matching line

Sample file: This is line one, this is another line, this is the PRIMARY INDEX line l ; This is another line The command should find the line with “PRIMARY INDEX” and remove the last character from the line preceding it (in this case , comma) and remove the first character from the line... (5 Replies)
Discussion started by: KC_Rules
5 Replies

8. Shell Programming and Scripting

Sed/awk to delete single lines that aren't touching other lines

Hello, I'm trying to figure out how to use sed or awk to delete single lines in a file. By single, I mean lines that are not touching any other lines (just one line with white space above and below). Example: one two three four five six seven eight I want it to look like: (6 Replies)
Discussion started by: slimjbe
6 Replies

9. UNIX for Dummies Questions & Answers

grep, sed, awk or tr or all Need help on Trying to convert something.

THIS is the output i Get i want to take out most of the banner and such and leave ------ down to ------ with fields right it doesnt seem to ouput right im not sure how to delete the $ characters because shell sees them ..... thansk or even something that make it looks better to understand... (2 Replies)
Discussion started by: ritztech
2 Replies

10. Shell Programming and Scripting

sed / awk to concatenate lines until blank line

Sample input (line feed indicated by ) --------------- The red fox jumped over the brown fence of the red hous He then went into the orchard --------------- Desired Output --------------- The red fox jumped over the brown fence of the red house He then went into the orchard (11 Replies)
Discussion started by: dunstonrocks
11 Replies
Login or Register to Ask a Question