linux command

1.对文件去除重复行

cat <file name> | sort | uniq

通过sort将文件内容排序,在通过uniq将连续重复行删除,

uniq 

  • -c 每列旁边显示该行重复出现的次数。
  • -d 仅显示重复出现的行列。
  • -s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
  • -u 仅显示出一次的行列。
  • -w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。

2.自动登录远程服务器

#!/usr/bin/expect

set timeout 10

set passwd <your password>

spawn ssh <host name > ###如10.10.*.*

expect {

        "password:" {

                send "$passwd\r";

                exp_continue;

        }

        "yes/no)?*" {

                send "yes\r";

                exp_continue;

        }

}

interact

3.解压文件出现ERROR

gzip:stdin:unexcept end of file

原因可能是压缩文件并不完整

4.csh抓取exit的值

功能:当a运行报错退出时,希望不执行b,整个c退出。

注意文件a中的exit 要为1,(0的话没试成功,原因未知),$?用来抓取exit的值

file a:
     if(-e xx/aa) then
         exit 1
     else 
        echo xxx
     endif

file b :
     echo ccc


file c :
    source a 
    if ($? == 1) then 
       exit 0
    else
        source b 
    endif

5.$_

$_ 表示上一次执行的命令,会打开ls 和a两个文件

terminal : ls a
gvim $_

将下面命令放在文件b,在terminal执行source b,打印出来就是“source b”

#!/bin/csh

set a = ($_)
print $a


terminal : source b
source b

6.seq

用于产生数字序列

有以下几个选项可以使用:

-s : 指定间隔符(参考于awk 中-F),默认是换行符

-w :  指定输出数字的位宽,位宽取决于最大数值的位宽,前面的数字若位宽不足,会自动在左侧补0

-f  :   指定输出数字的位宽,位宽取决于该选项后的参数,如位宽不足,会自动在左侧补空格。(参考tcl中的fomat功能;且与-w是互斥的,)

>>>:seq 3
1
2
3
>>>: seq -s " " 1 5
1 2 3 4 5
>>>: seq -s " " -w 9 11
09 10 11
>>>: seq -f %3g 9 11
  9
 10
 11

7.sed 高级用法及常用命令

n,N;g,G;x,X;h,H

sed两个space :

        pattern space:sed做处理的缓冲区

        hold space :同样是缓冲区,可以和pattern space内容做到互通

sed 工作机制:行操作,正常的流程是从文件的第一行开始执行sed的命令,直到文件末尾,sed自动结束

>>> cat a.file
1.I have a dream
2.I have a pen
3.I have a house
4.I have a car

n/N:是将当前行和下一行一起读入pattern space(n:这里的n是sed的高级命令,要和-n 这个option 区分开)

>>>sed 'n,s/a/an/g' a.file

1.I have a dream
2.I hanve an pen
3.I have a house
4.I hanve an car
>>>sed 'N,s/a/an/' a.file

1.I have an dream
2.I have an pen
3.I have an house
4.I have an car

可以发现主要区别就在于,

        n是对只对第二行进行sed操作;

        N是对读到pattern space中的2行都做sed操作。

g,G:   将hold space中的内容复制/追加到pattern space

h,H:   将pattern space中的内容复制/追加到hold space

8.去重

Awk ‘FNR == NR{a[$0];next} {if($0 in a) print $0}’  a b
处理第一个文件时 FNR NR 是一致的,将每行信息存在数组 a 中,直到所有行被保存后,
当处理第二个文件时, FNR NR 是不一致的,则进行 if 部分操作,判断当前行是否被存在 a 中,存在就输出

  Awk ‘FNR == NR{a[$0];next} {if(!($0 in a )) print $0}’  a b

9.找到两个文件中相同或不同的内容

Awk ‘{for (i=1;i<=NF;i++)a[i]=a[i]$i” ”}END for (v in a)print a[v]’ file

        •读入第一行时,a[i]都未被赋值,即a[1] = 1

        •读入第二行时,a[1] 已经等于1,即a[1] = 1 2

        •读入第三行时,a[1]1 2,即a[1] = 1 2 3

        •使用fora中信息打出

10.列转为行输出

Awk –F . ‘!c[$2,$4]++’  target.text
-F 指定分割符
C 为存储数据的临时数组,用于存放指定数据的出现次数
++ 自增,先返回数组元素的值,然后再加 1 ;将次数作为逻辑值配合!,非0 被解释为 true

   若第一次出现则为真,打印该行,后面即为假,不打印  

最近遇到一个需求修改大量的大文件,perl速度远超sed !!!!

sed做24小时都无法完成,perl只需要30分钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值