免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3242 | 回复: 16
打印 上一主题 下一主题

[文本处理] 如何将一个文本中的最后一行转化成第一行? [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-27 09:45 |只看该作者 |倒序浏览
两个文件   1.txt和2.txt

1.txt的内容是:
aa  1   2
bb  2   3
cc   3   4


2.txt
aa   2   1
bb   8   2
cc    4   4
dd   5   5

join  1.txt   2.txt的输出是:
aa  1  2  2  1
bb  2  3  8  2
cc   3  4  4  4

我如果现在想把cc  3  4  4  4提到第一行,即变成这样:
cc   3   4   4   4
aa   1   2   2   1
bb   2   3   8   2

用什么shell脚本可以实现?


论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
2 [报告]
发表于 2016-04-27 09:54 |只看该作者
  1. awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;++i)print $i}'
复制代码

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
3 [报告]
发表于 2016-04-27 09:57 |只看该作者
本帖最后由 mswsg 于 2016-04-27 09:58 编辑

python remove_last_to_first.py --input your_input_file > output.txt
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. __author__ = 'shengwei ma'
  4. __author_email__ = 'shengweima@icloud.com'
  5. import sys
  6. import getopt

  7. input_file = ""

  8. try:
  9.    opts, args = getopt.getopt(sys.argv[1:], "h", ["input="])
  10. except getopt.GetoptError as err:
  11.     print(str(err))
  12. for op, value in opts:
  13.     if op == "--input":
  14.         input_file = value
  15.     elif op == "-h":
  16.         print("python remove_last_to_first.py --input your_input_file > out.txt")
  17.         sys.exit()

  18. with open(input_file, 'r') as f:
  19.     lines = f.readlines()
  20.     print lines[-1].strip()
  21.     for line in lines[:-1]:
  22.         line = line.strip()
  23.         print line

复制代码

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
4 [报告]
发表于 2016-04-27 10:58 |只看该作者
回复 2# elu_ligao


    [root@LVM11 ~]# join 1.txt 2.txt
                           
                aa 1 2 2 1
                bb 2 3 8 2
                cc 3 4 4 4

    而运用你的命令后得到:
   [root@LVM11 ~]# join 1.txt 2.txt|awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;++i)print $i}'

                cc 3 4 4 4
                cc
                3

   可是我想得到的是经过脚本后,得到:
               cc 3 4 4 4
               aa 1 2 2 1
               bb 2 3 8 2
              

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
5 [报告]
发表于 2016-04-27 11:08 |只看该作者
本帖最后由 elu_ligao 于 2016-04-27 11:09 编辑

回复 4# 274920831


    不好意思, 最后不是 $i, 是 a

   又显示不了了,
  1. awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;++i)print a[i]}'
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2016-04-27 11:09 |只看该作者
回复 4# 274920831

$ join 1.txt 2.txt | tail -1; join 1.txt 2.txt | sed '$d'
cc 3 4 4 4
aa 1 2 2 1
bb 2 3 8 2

   

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-23 06:20:0015-16赛季CBA联赛之八一
日期:2017-10-26 17:58:2515-16赛季CBA联赛之北控
日期:2017-11-02 10:50:56
7 [报告]
发表于 2016-04-27 11:10 |只看该作者
笨办法:

join 1.txt 2.txt | sed -n '$p' >> 3.txt && join 1.txt 2.txt | sed '$d' >> 3.txt

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
8 [报告]
发表于 2016-04-27 11:23 |只看该作者
回复 5# elu_ligao


    elu_ligao 这个命令可以使用,请问:
   
    a[NR]=$0
    这个是什么意思?
   

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
9 [报告]
发表于 2016-04-27 11:32 |只看该作者
  1. echo 'aa  1  2  2  1
  2. bb  2  3  8  2
  3. cc   3  4  4  4'|sed -r ':a;N;$!ba;s/(.*)\n(.*)/\2\n\1/'
  4. cc   3  4  4  4
  5. aa  1  2  2  1
  6. bb  2  3  8  2
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
10 [报告]
发表于 2016-04-27 11:33 |只看该作者
回复 8# 274920831


    NR 是awk 内置变量, 代表处理文本的行数, $0 就是该行的内容
    a[NR] = $0 就是以行数为数组a 的下标, 该行内容为他的值, 解释的可能不太清楚, 这个应该是awk 数组基础, 有很多精华帖, 可以去看看


awk初学之常见问题
http://bbs.chinaunix.net/forum.p ... mp;fromuid=29189749
文本编辑的一点心得--awk篇
http://bbs.chinaunix.net/forum.p ... mp;fromuid=29189749

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP