sed或awk处理文件最后一行的实现方法

有如下的文本:
abcd 1234 fds
2011 550
1023 832er 1231

要求处理后如下所示:
abcd 1234 fds
2011 550
total1:1023 total2:832er 12end

判断如果是文本最后一行则在第一列前面加total1:,第二列加total2:, 第三列后面减掉后面两个字符并加end。

分别用sed与awk来实现。
sed:


代码如下:

echo 'abcd 1234 fds
2011 550
1023 832er 1231' |sed -r '$s/([^ ]*)( )([^ ]*)( )(..).*$/total1:\1\2total:\3\4\5end/'

abcd 1234 fds
2011 550
total1:1023 total:832er 12end

awk:


代码如下:

awk 'NR>1{print a}{a=$0}END{$1="total1:"$1;$2="total2:"$2;print gensub(/..$/,"end",$0)}' file
awk 'BEGIN{getline a}{print a;a=$0}END{$1="total1:"$1;$2="total2:"$2;$3=gensub(/..$/,"end",1,$3);print}'
awk '{if(!getline line){print "total1:"$1" total2:"$2" "gensub(/..$/,"end",1,$3)}else{print line?$0 RS line:$0}}'

(0)

相关推荐

  • sed或awk处理文件最后一行的实现方法

    有如下的文本:abcd 1234 fds2011 5501023 832er 1231 要求处理后如下所示:abcd 1234 fds2011 550total1:1023 total2:832er 12end 判断如果是文本最后一行则在第一列前面加total1:,第二列加total2:, 第三列后面减掉后面两个字符并加end. 分别用sed与awk来实现.sed: 复制代码 代码如下: echo 'abcd 1234 fds2011 5501023 832er 1231' |sed -r '$

  • Shell正则表达式之grep、sed、awk实操笔记

    最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅. 首先先复制一段范例: 复制代码 代码如下: # vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food.

  • Linux中 sed 和 awk的用法详解

    sed用法: sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] 'command' 输入文本 常用选项: -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e∶直接在指令列模式上进行 sed 的

  • shell脚本之正则表达式、grep、sed、awk

    --正则-- 基础正则 ^word     ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$     ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$        ##表示空行 .         ##代表且只能代表任意一个字符 \         ##例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原 \n        ##换行符 \r        ##匹配回车 \w         ##匹配任意一个字符和数字 *        

  • Shell中正则表达式及sed和awk常见问题

    目录 1 正则表达式中的+.?.*分别表示什么含义? 2 如何编写正则表达式匹配11位的手机号? 3 简述sed定址符的作用及表示方式. 4 如何使用sed提取文本中的偶数行? 5 如何使用sed删除文本中每行的第4个字符? 6 提取/etc/passwd文件的第6-10行,另存为pass5.txt文件. 7 简述awk工具的基本语法格式. 8 简述awk工具常用的内置变量.各自的作用. 9 awk处理文本时,读文件前.读取文件内容中.读文件后后这三个环节是如何表示的? 10 提取当前eth0网

  • 如何利用sed命令高效删除文件的特定行

    前言 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是,一旦文件中的行数据非常多,而且数据冗杂的情况下,你还要用上面的方法去做的话就很恐怖了.为此,今天这篇文章将带大家一起学习运用 sed 命令行工具,即使在数据多而杂的情况下也能高效而优雅地删除文件中的特定行内容. sed 是 Stream Editor 的简写,它用于在 Linux 中进行基本的文本转换,是文件操作的一个重要命令,所以

  • python之文件读取一行一行的方法

    如下所示: f=file('a.txt') for eachline in f: print eachline 以上这篇python之文件读取一行一行的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python 删除文件每一行的行号思路解读

    目录 1. what 2. 思路 3. 代码 1. what 这个行号真的很烦噶 试着写一个py去掉 2. 思路 def second_of_str分割,取分隔符右边的元素返回一个列表 def move传入文件路径,读取每行,列表存储,调用 second_of_str分割后的存入新列表 主函数调用move 3. 代码 def second_of_str(str,splitsymbol): s = str.split(splitsymbol,1) # 分隔符右边的元素 # if len(s) ==

  • Go实现替换(覆盖)文件某一行内容的示例代码

    目录 1.前言 2.实现覆盖某一行文件内容的思路 3.实现覆盖某一行内容的代码示例 4.扩展 1.前言 有这样一个需求,我们查找到文件中带有某个关键词的一行内容后,对该行内容进行替换,替换成我们需要的新内容,比如修改网络配置文件.修改图片地址.修改代码中所有关键词等,类似于编辑器中的关键词替换功能,只不过我们是直接判断文件而已. 2.实现覆盖某一行文件内容的思路 1.打开文件2.读取文件每一行3.根据关键词判断是否是需要覆盖的行,是的话则从行开头写内容,使其覆盖该行旧内容由于是覆盖,所以我们有一

  • Shell脚本一次读取文件中一行的2种写法

    写法一: 复制代码 代码如下: #!/bin/bash while read line do       echo $line     #这里可根据实际用途变化 done < urfile 写法二: 复制代码 代码如下: #!/bin/bash cat urfile | while read line do     echo $line done 注意:以上代码中urfile 为被读取的文件 Shell读取文本文件 方法一:通过命令获取所需内容,传递给变量 复制代码 代码如下: var1=$(g

随机推荐