Eugene Soldatov
Eugene Soldatov

Reputation: 10135

awk add string to each line except last blank line

I have file with blank line at the end. I need to add suffix to each line except last blank line.

I use:

awk '$0=$0"suffix"' | sed 's/^suffix$//'

But maybe it can be done without sed?

UPDATE:

I want to skip all lines which contain only '\n' symbol.

EXAMPLE:

I have file test.tsv:

a\tb\t1\n
\t\t\n
c\td\t2\n
\n

I run cat test.tsv | awk '$0=$0"\t2"' | sed 's/^\t2$//':

a\tb\t1\t2\n
\t\t\t2\n
c\td\t2\t2\n
\n

Upvotes: 1

Views: 1449

Answers (5)

Sundeep
Sundeep

Reputation: 23667

If perl is okay:

$ cat ip.txt 
a   b   1

c   d   2

$ perl -lpe '$_ .= "\t 2" if !(eof && /^$/)' ip.txt 
a   b   1    2
             2
c   d   2    2

$ # no blank line for empty file as well
$ printf '' | perl -lpe '$_ .= "\t 2" if !(eof && /^$/)'
$ 
  • -l strips newline from input, adds back when line is printed at end of code due to -p option
  • eof to check end of file
  • /^$/ blank line
  • $_ .= "\t 2" append to input line

Upvotes: 1

VIPIN KUMAR
VIPIN KUMAR

Reputation: 3137

Try this -

$ cat f ###Blank line only in the end of file
-11.2
hello

$ awk '{print (/./?$0"suffix":"")}' f
-11.2suffix
hellosuffix

$

OR

$ cat f  ####blank line in middle and end of file
-11.2

hello

$ awk -v val=$(wc -l < f) '{print (/./ || NR!=val?$0"suffix":"")}' f
-11.2suffix
suffix
hellosuffix

$

Upvotes: 0

Ed Morton
Ed Morton

Reputation: 203502

It sounds like this is what you need:

awk 'NR>1{print prev "suffix"} {prev=$0} END{ if (NR) print prev (prev == "" ? "" : "suffix") }' file

The test for NR in the END is to avoid printing a blank line given an empty input file. It's untested, of course, since you didn't provide any sample input/output in your question.

To treat all empty lines the same:

awk '{print $0 (/./ ? "suffix" : "")}' file

Upvotes: 3

karakfa
karakfa

Reputation: 67497

this will skip all blank lines

awk 'NF{$0=$0 "suffix"}1' file

to only skip the last line if blank

 awk 'NR>1{print p "suffix"} {p=$0} END{print p (NF?"suffix":"") }' file

Upvotes: 1

RavinderSingh13
RavinderSingh13

Reputation: 133518

@try:

awk 'NF{print $0 "suffix"}' Input_file

Upvotes: 2

Related Questions