用shell脚本删除文本文件头几行注释,并交换前两列内容

一个完整例子

首先假如有一个要处理的文件X,其中内容如下

#y x 数据
1     9     0.10
1     10    0.20
1     11    0.30
2     9     0.40
2     10    0.50
2     11    0.70
3     9     0.80
3     10    0.90
3     11    1.00

文件中第一行是注释。其余各行中,第一列是y坐标,第二列是x坐标。我们要做的是,将第一行注释删除掉,然后将x坐标放到第一列,y坐标放到第二列。

  1. 用sed来删除注释行
#删除第1行
sed -i 1 filename

或者

#删除1到n行
n=3
sed -i '1,'$n'd' filename

使用-i选项时,直接对文件进行修改。如果不用-i选项,或者使用-e,则sed命令不会修改原始文件,而是将处理后的文本内容输出到窗口,这时也可以使用重定向>来将内容输出到另一个文件

  1. 用gawk来交换第一第二列
#默认以空格或制表符作为分隔符
gawk '{printf "%15.6f %15.6f %15.6f\n",$2,$1,$3}' file1 > file2

如果分隔符是逗号或者分号等其他符号,需要用-F选项:

#以逗号为分隔符
gawk -F"," '{printf "%15.6f %15.6f %15.6f\n",$2,$1,$3}' file1 > file2
  1. 完整代码

swap12col.sh

#swap12cols: 交换文件前两列的函数
#参数1: 要交换第1第2列的文件
#参数2: 交换第1第2列后要输出到的文件
#参数3: 原始文件中,需要删除的头几行的行数
#参数4: 分隔符号
function swap12cols(){
    original_file=$1
    output_file=$2
    n=$3
    cp $original_file ${original_file}_copy #复制一份副本
    
    if (($n>0)) #如果n>0
    then
        sed -i '1,'$n'd' ${original_file}_copy #删除前n行
    fi
    #交换第一第二行
    gawk -F"$4" '{printf "%15.6f %15.6f %15.6f\n",$2,$1,$3}' ${original_file}_copy > $output_file
    
    rm ${original_file}_copy #删除副本
}

#调用函数,交换X前两列,并删除前1行,结果输出到X2,分隔符为空格
swap12cols X X2 1 " "

在命令行中输入bash swap12col.sh,得到输出文件X2,文件内容如下

       9.000000        1.000000        0.100000
      10.000000        1.000000        0.200000
      11.000000        1.000000        0.300000
       9.000000        2.000000        0.400000
      10.000000        2.000000        0.500000
      11.000000        2.000000        0.700000
       9.000000        3.000000        0.800000
      10.000000        3.000000        0.900000
      11.000000        3.000000        1.000000
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值