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