dragonszy
V2EX  ›  问与答

请教文本文件批量处理问题

  •  
  •   dragonszy · Sep 5, 2014 · 3224 views
    This topic created in 4290 days ago, the information mentioned may be changed or developed.
    现在有三十几个文本文件,每个一千多行,有用内容是两个区块,每个区块是三列数字。

    1.删除 1-21行
    2.保留 22-822行 (记为A区块,3列数字,由tab分割)
    3.删除 823-828行
    4.保留 829-1629行 (记为B区块,3列数字,由tab分割)
    5.将 B区块的第2列 替换掉 A区块的第3列,然后删除B区块

    其实就是选取A区块的1、2列和B区块的第2列合并为一个新区块,导出文本文件。

    原来只有一两个文本文件的时候都是用 sublime text 手动处理的,现在文件比较多,也不会 awk,sed 什么的,故求万能的v2exer们给个脚本!谢谢!
    3 replies    2014-09-07 13:09:26 +08:00
    merlin852
        1
    merlin852  
       Sep 5, 2014 via iPad
    awk'NR>=22&NR<=822{a[NR]=$1,c[NR]=$3}NR>=829&NR<=1629{b[NR-807]=$2}END{for(i in a)print a[i],b[i],c[i]} file >>newfile
    dragonszy
        2
    dragonszy  
    OP
       Sep 5, 2014
    @merlin852 谢谢啦!不过我修改后运行了一下还是有语法错误。应该是在a[NR]=$1这块儿,直接用行号好像不能内部循环。我看了 http://coolshell.cn/articles/9070.html 发现没有[NR]的例子,不知怎么才能赋值。求解!

    awk 'NR>=22 && NR<=822 {a[NR]=$1,b[NR]=$2} NR>=829 && NR<=1629 {c[NR-828]=$2} END {for(i in a) printf "%s\t%s\t%s",a[i],b[i],c[i]}' file.txt >> newfile.txt
    merlin852
        3
    merlin852  
       Sep 7, 2014 via iPad
    &是两,$1后面,换;应该就好了,没开电脑没法测试
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   913 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:17 · PVG 05:17 · LAX 14:17 · JFK 17:17
    ♥ Do have faith in what you're doing.