awk or sed - Convert 2 lines to 1 line


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk or sed - Convert 2 lines to 1 line
# 1  
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  
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  
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  
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 01:25 PM..
These 3 Users Gave Thanks to drl For This Post:
# 5  
Code:
awk '{ORS=(ORS==RS)?FS:RS; print $NF}' infile

These 2 Users Gave Thanks to Scrutinizer For This Post:
# 6  
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  
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 for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #961
Difficulty: Medium
SQL MammyJammer was a computer worm that caused a denial of service on some Internet hosts and dramatically slowed down general Internet traffic in 2003.
True or False?

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

Featured Tech Videos