Re-formatting a text file's columns with awk
I don't know why you are copying things left and right. The simple thing is
awk '{print "-" $2, substr($5,2,length($5)-2), "+", $4, ";"}' File1
I put the -
in the beginning and the ;
at then end.
In between we print
$2
because we want it as it is.- a substring of
$5
, which is the string without the first and the last character. We skip the first character by starting at position 2 (awk has always been strange about that) and leave out the last character by only selecting a substring which is two characters shorter, than the original$5
- the
+
because we want it - and then
$4
However, I'm not sure if all these string functions are specific to GNU awk.
With sed
sed '
s/\S\+\s/-/
s/\(\S\+\s\)\{2\}{\(\S\+\)}/\2 + \1;/
' File1
And awk variation
awk -F"[[:blank:]{}]+" '{print "-" $2, $5, "+", $4}' ORS=" ;\n" File1
Easy TXR job:
$ txr -c '@(repeat)
@a @b @c @d {@e}
@(do (put-line `-@b @e + @d ;`))
@(end)' -
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {TBMKF}
ABC Cool Lol POP {YUKER}
ABC Cool Lol POP {EFEFVD}
[Ctrl-D][Enter]
-Cool MNB + POP ;
-Cool MNB + POP ;
-Cool MNB + POP ;
-Cool TBMKF + POP ;
-Cool YUKER + POP ;
-Cool EFEFVD + POP ;
Using TXR Lisp awk macro to transliterate Awk solution:
txr -e '(awk (t (prn `-@[f 1] @{[f 4] [1..-1]} + @[f 3] ;`)))'
Fields are in the f
list, and indexing is zero based.