Aligning a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Aligning a file
# 1  
Old 08-21-2014
Aligning a file

I have a large text file in following format

Code:
cat input.txt

abc
qwert
qwer
afweferf
wdfwefwe ==> kjhjkwdd
mnmn ==> jkjkjwekj
poiu ==> lklklke
tytyutut ==> olkjmnsmn

I need to align those lines with the characters " ==>" . I dont want to disturb the lines which dont have "==>".

The output needs to be as below:

cat output.txt

Code:
abc
qwert
qwer
afweferf
wdfwefwe ==> kjhjkwdd
mnmn     ==> jkjkjwekj
poiu     ==> lklklke
tytyutut ==> olkjmnsmn

Moderator's Comments:
Mod Comment edit by bakunin: added CODE-tags for the second output too.

Last edited by ctrld; 08-21-2014 at 10:46 PM..
# 2  
Old 08-21-2014
It must read the file twice, first to determine the maximum width, the second to align:

Code:
$ awk -F"==>" -v OFS="==>" 'NR==FNR { if(length($1) > L) L=length($1) ; next } NF>1 { $1=sprintf("%-"L"s",$1) } 1' input.txt input.txt
abc
qwert
qwer
afweferf
wdfwefwe  ==> kjhjkwdd
mnmn      ==> jkjkjwekj
poiu      ==> lklklke
tytyutut ===> olkjmnsmn

$

There is an extra = in the output because there's an extra = in the input.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 08-21-2014
Or try using column command:
Code:
$ column -t input.txt
abc
qwert
qwer
afweferf
wdfwefwe  ==>   kjhjkwdd
mnmn      ==>   jkjkjwekj
poiu      ==>   lklklke
tytyutut  ===>  olkjmnsmn

These 2 Users Gave Thanks to Yoda For This Post:
# 4  
Old 08-21-2014
Thanks Corona and Yoda.

I had already tried column command and it is aligning the lines without "==>" also.
For example, if I have a line like below in my input.txt the output goes wrong.

Code:
cat input.txt

abc
qwert
qwer
afweferf
wdfwefwe ==> kjhjkwdd
mnmn ==> jkjkjwekj
poiu ==> lklklke
tytyutut ==> olkjmnsmn
This text need not be aligned.

column -t input.txt
Code:
abc
qwert
qwer
afweferf
wdfwefwe  ==>   kjhjkwdd
mnmn      ==>   jkjkjwekj
poiu      ==>   lklklke
tytyutut  ==>   olkjmnsmn
This      text  need       not  be  aligned.

If I try column -s "==>" -t input.txt:
Code:
 
column -s "==>" -t input.txt
abc
qwert
qwer
afweferf
wdfwefwe                         kjhjkwdd
mnmn                             jkjkjwekj
poiu                             lklklke
tytyutut                         olkjmnsmn
This text need not be aligned.

The ==> is getting removed.

---------- Post updated at 08:06 AM ---------- Previous update was at 07:30 AM ----------

I just noticed one thing, the text before "==>" does not exceed 50 characters in max length. I think placing the ==> at exactly 50th character position should do the trick.
# 5  
Old 08-21-2014
Try :

Code:
$ awk 'NR==FNR{ if(/\==>/){ l =  length($1) > l ? length($1) : l } next }/\==>/{$1=sprintf("%-"l"s",$1)}1' file file

Code:
$ awk '/\==>/{$1=sprintf("%-"l"s",$1)}1' l=48 file

This User Gave Thanks to Akshay Hegde For This Post:
# 6  
Old 08-22-2014
It worked like a charm!!

Yes it worked like a charm.. Smilie

Thanks Akshay.
# 7  
Old 08-22-2014
Hi.

The general alignment program align provides a feature for processing only lines on which patterns match:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate align text for matched lines, align.
# For align code, see:
# http://freecode.com/projects/align

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
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 align

FILE=${1-data1}

pl " Input data file $FILE:"
cat $FILE

pl " Results, align text only in lines in which \"==>\" appears:"
align -e "/==>/" $FILE

pl " Results, with a wider gutter:"
align -g 5 -e "/==>/" $FILE

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 5.0.8 (lenny, workstation) 
bash GNU bash 3.2.39
align 1.7.0

-----
 Input data file data1:
abc
qwert
qwer
afweferf
wdfwefwe ==> kjhjkwdd
mnmn ==> jkjkjwekj
poiu ==> lklklke
tytyutut ==> olkjmnsmn
This text need not be aligned.

-----
 Results, align text only in lines in which "==>" appears:
abc
qwert
qwer
afweferf
wdfwefwe ==> kjhjkwdd
mnmn     ==> jkjkjwekj
poiu     ==> lklklke
tytyutut ==> olkjmnsmn
This text need not be aligned.

-----
 Results, with a wider gutter:
abc
qwert
qwer
afweferf
wdfwefwe     ==>     kjhjkwdd
mnmn         ==>     jkjkjwekj
poiu         ==>     lklklke
tytyutut     ==>     olkjmnsmn
This text need not be aligned.

The code for align can be obtained from the URL noted in the first part of the script.

Best wishes ... cheers, drl

Last edited by drl; 08-24-2014 at 02:27 PM.. Reason: Edit 1 - correct minor typo.
These 2 Users Gave Thanks to drl For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script (sh file) logic to compare contents of one file with another file and output to file

Shell script logic Hi I have 2 input files like with file 1 content as (file1) "BRGTEST-242" a.txt "BRGTEST-240" a.txt "BRGTEST-219" e.txt File 2 contents as fle(2) "BRGTEST-244" a.txt "BRGTEST-244" b.txt "BRGTEST-231" c.txt "BRGTEST-231" d.txt "BRGTEST-221" e.txt I want to get... (22 Replies)
Discussion started by: pottic
22 Replies

2. Shell Programming and Scripting

Aligning Texts

is there any way to align my text so every column begins on the same line as the previous line? here's my command: printf "THEN ( ${SEARCHPATTB} = Hour = ${CALTOTB} ) %8s => %8s NOW ( ${SEARCHPATT} = Hour = ${CALTOT} ) %7s => %7s Reduced By: %7s -${RESULT}"\\n output i'm currently getting... (2 Replies)
Discussion started by: SkySmart
2 Replies

3. Shell Programming and Scripting

Aligning data

Hi Guys, How can you align data getting the UID, GID HOSTNAME in same column input: server1 uid=1010(faculty) gid=700(teacher) groups=700(teacher), 800(models) student:x:500:500:student:/home/student:/bin/bash server2 uid=1010(OSAD) gid=700(teacher) groups=700(teacher), 809(staff)... (5 Replies)
Discussion started by: invinzin21
5 Replies

4. Shell Programming and Scripting

Aligning output with null fields in shell script

Hello Gurus ! I have what probably amounts to a few simply changes to fix; however for the life of me I cannot seem to get it ti work. I need to align the output of my script (I am writing to a logfile)... here's the lines in my code: if then echo "NODE: $node" >> $logfile... (6 Replies)
Discussion started by: gvolpini
6 Replies

5. UNIX for Dummies Questions & Answers

Help with Aligning the content of a txt file

Hello friends Please help me to display the content of a file in specific aligned manner. for ex. the content of the file may be >$TEST WELCOME HI HELLO UNIX SHELL SCRIPTING >$ I want to display the content like . TEST WELCOME HI HELLO ... (18 Replies)
Discussion started by: rajmohan146
18 Replies

6. Shell Programming and Scripting

Aligning columns in a text file using Perl

Hi All, I am new to perl and was trying to write a simple program which will generate a text file as output.. now the output which i am getting is something like this.. ================================================================================================== Col1 ... (8 Replies)
Discussion started by: smarty86
8 Replies

7. Shell Programming and Scripting

Aligning numbers in the second file based on first file

Hi All, I have two sets of files with names .dat and .txt. The number of files is really large more than 90000. The files have names like 1.dat, 2.dat,3.dat and so on where as txt files have names like 1.txt, 2.txt, 3.txt and so on The DAT and TXT files are equal in number. About 90000 each ... (4 Replies)
Discussion started by: shoaibjameel123
4 Replies

8. Shell Programming and Scripting

Aligning text files by max field length

Hello, Is there anyway that I can align a pipe delimited text file by the maxium field length where the field is separated out by pipes for large text files with more than 100,000 rows? So, far I have searched other forums and google about aligning text files in unix and I have noticed that... (7 Replies)
Discussion started by: physalis2099
7 Replies

9. Programming

Aligning for boundary conditions

Hi, I have tcp/ip client server programs which will communicate through reqest,reply c-structures. As the sizeof(struct) may give different value between client and server programs, how do i align properly for boundary conditions. Could anybody please give some suggestion. Thanks in... (3 Replies)
Discussion started by: axes
3 Replies

10. UNIX for Dummies Questions & Answers

Aligning Characters in Bash/Beautiful Screens

Howdy, Supposing I want to output the following code to the screen in a bash script, this works fine until you use variables as below, because the variable could be of any length, meaning the screen output for line 2 will have the ultimate # out of alignment. Is there a simple way round this?... (1 Reply)
Discussion started by: de_la_espada
1 Replies
Login or Register to Ask a Question