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
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
•使用for将a中信息打出
10.列转为行输出
若第一次出现则为真,打印该行,后面即为假,不打印
最近遇到一个需求修改大量的大文件,perl速度远超sed !!!!
sed做24小时都无法完成,perl只需要30分钟