Lower to upper..tr + awk ?

I have a file that has a pattern 2 lines, blanktwo line
If encountering the first line, the 2nd line need to be converted to UPPERCASE...or...conver the 2nd line after ablank into uppercase

Is there a 'tr' function in awk..(probably the best tool over sed) ?

i.e.
......................

a
b

c
d

e
f

.................
becomes...
.................

a
B

c
D

e
F

Try:

awk 'f{gsub(/[[:lower:]]/,toupper($0));f=0};NF{f=1}1' file

Try:

awk '{$2=toupper($2)}1' RS= ORS='\n\n' FS='\n' OFS='\n' file

--
fix for pilnet101's approach:

awk 'f{gsub($0,toupper($0));f=0};NF{f=1}1' file 

or better:

awk 'f{$0=toupper($0);f=0}; NF{f=1}1' file

Of these 3 suggestions, I think #3 is the most robust, since it does not use regex while the input file may contain special characters (#2), nor does it depend on the empty line being completely empty (no whitespace) + does it leave a trailing empty line at the end of the file (#1)..

Hello stevie_velvet,

Please use code tags as per foum rules for your commands/codes/Inputs into your post, could you please try following and let me know if this helps.

awk '!NF{A=toupper(A);i++;next} {A[++i]=$0} END{if(A){A=toupper(A)};for(j=1;j<=i;j++){print A[j]}}'  Input_file

Output will be as follows.

a
B

c
D

e
F

Thanks,
R. Singh

Print uppercase if previous line had fields (was not empty)

awk '{print pnf?toupper($0):$0; pnf=NF}'

I'm not quite sure what "I have a file that has a pattern 2 lines, blanktwo line" means. I would have thought that blanktwo line meant that there would be two blank lines, but I don't see any examples of that in the sample input file. The following will set all lowercase characters on the second non-blank line in each set of non-blank lines separated by one or more blank lines:

awk '++n==2{$0=toupper($0)} !NF{n=0} 1' file

If file contains:

a
b

c
d

e
f

g


h
i
j


k
l
m
n

it produces the output:

a
B

c
D

e
F

g


h
I
j


k
L
m
n

Hi.

I'm assuming that the file format is: "2 lines, blank [line], 2 lines, blank [line] ... " However, I am not sure if the awk was a requirement or not. If so, then there are a number of awk solutions above; if not, then here are a few alternatives:

#!/usr/bin/env bash

# @(#) s1       Demonstrate UPPERCASE specific lines, sed.

# 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 "$*"; }
em() { pe "$*" >&2 ; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C sed perl pass-fail

FILE=${1-data1}
E=expected-output.txt

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

pl " Expected output:"
cat $E

# GNU sed, address: first~step
# Match every step'th line starting with line first.
# man sed
#
# sed 's/\(.*\)/\L\1/' # but use "U" for uppercase
# http://stackoverflow.com/questions/4569825/sed-one-liner-to-convert-all-uppercase-to-lowercase

pl " Results, GNU sed "s":"
sed '2~3s/\(.*\)/\U\1/' $FILE

pl " Results, GNU sed "s", extended RE, more readable:"
sed -r '2~3s/(.*)/\U\1/' $FILE

pl " Results, GNU sed "s", extended RE, '&' = whatever is matched:"
sed -r '2~3s/.*/\U&/' $FILE

pl " Results, GNU sed "y":"
sed '2~3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' $FILE

pl " Results, perl:"
perl -wp -e 'BEGIN{$p=2};if ( $. == $p ) { y/[a-z][A-Z]/[A-Z][a-z]/; $p += 3; }' $FILE |
tee f1

# Check final result automatically.

pass-fail

exit 0

producing:

$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.4 (jessie) 
bash GNU bash 4.3.30
sed (GNU sed) 4.2.2
perl 5.20.2
pass-fail - ( local: RepRev 1.6, ~/bin/pass-fail, 2016-07-23 )

-----
 Input data file data1:
a
b

c
d

e
f

-----
 Expected output:
a
B

c
D

e
F

-----
 Results, GNU sed s:
a
B

c
D

e
F

-----
 Results, GNU sed s, extended RE, more readable:
a
B

c
D

e
F

-----
 Results, GNU sed s, extended RE, '&' = whatever is matched:
a
B

c
D

e
F

-----
 Results, GNU sed y:
a
B

c
D

e
F

-----
 Results, perl:
a
B

c
D

e
F

-----
 Comparison of 8 created lines with 8 lines of desired results:
 Succeeded -- files (computed) f1 and (standard) expected-output.txt have same content.

Best wishes ... cheers, drl