awk将字符串添加到除最后一个空行之外的每一行

时间:2017-04-06 15:47:11

标签: linux bash awk

我的文件末尾有空白行。我需要为除最后一个空白行之外的每一行添加后缀。

我用:

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

但也许可以在没有sed的情况下完成?

更新:

我想跳过所有只包含' \ n'符号

实施例

我有档案test.tsv

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

我运行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

5 个答案:

答案 0 :(得分:3)

听起来这就是你所需要的:

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

END中的NR测试是为了避免在给定空输入文件的情况下打印空白行。当然,它没有经过测试,因为你没有在你的问题中提供任何样本输入/输出。

要处理所有空行:

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

答案 1 :(得分:1)

这将跳过所有空行

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

仅在空白

时跳过最后一行
 awk 'NR>1{print p "suffix"} {p=$0} END{print p (NF?"suffix":"") }' file

答案 2 :(得分:1)

@try:

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

答案 3 :(得分:1)

如果perl没问题:

$ 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从输入中删除换行符,由于-p选项
  • 而在代码末尾打印行时添加回来
  • eof检查文件结尾
  • /^$/空行
  • $_ .= "\t 2"附加到输入行

答案 4 :(得分:0)

试试这个 -

$ 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

$