sed -i 备份
1 | sed -i.bak 's/:/;/' users |
sed -i将会在原文件上执行sed命令,-i.bak将创建一个users.bak文件备份原users文件。
只在第N行进行替换
1 | sed 'Ns/foo/bar/' test.txt |
输出第N行
1 | perl -ne '$.==N && print && exit' test.txt |
参数解释:
$.
为专用变量,表示当前行编号;
输出第N、M行
1 | perl -ne 'print if $.==N || $.==M' test.txt |
输出第N到M行
1 | perl -ne 'print if $.>=N && $.<=M' test.txt |
输出最长行
1 | perl -ne '$1=$_ if length($_)>length($1);END {print $1}' test.txt |
输出奇数行
1 | perl -ne 'print if $. % 2' test.txt |
输出偶数行
1 | perl -ne 'print if $. % 2==0' test.txt |
重复行只输出一次,非重复行不输出
1 | perl -ne 'print if ++$a{$_} ==2' test.txt |
输出匹配到模式的下一行
1 | awk '/模式/ {getline; print}' test.txt |
参数解释:
getline读取下一行数据,继续运行当前的awk脚本;next也的读取下一行,然后把控制权交给了awk脚本的顶部,如awk ‘{if(NR==1){next} print $1,$2}’ data
;
输出匹配到模式的行到最后一行
1 | awk '/模式/,0' test.txt |
输出匹配到模式1到模式2 的行
1 | awk '/模式1/,/模式2/' test.txt #包括模式1和2 |
删除所有空行
1 | awk NF test.txt |
空行时NF是零
文件1和文件2根据某一列对应值合并
1 | [zpxu@node102 ~]$ cat datafile |
空白单元格
1 | $ cat test.txt |
参数解释:
awk中最后的数字1是{ print $0 }
的简写。
另一种效果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17$ cat myfile.csv
1,2,3,4,5,6,7
,,,,,,
1,,,4,5,,
,2,3,4,5,,
$ cat fill-empty-values.sh
for i in $( seq 1 2); do
sed -e "s/^,/$2,/" -e "s/,,/,$2,/g" -e "s/,$/,$2/" -i $1
done
$ bash fill-empty-values.sh myfile.csv 0
$ cat myfile.csv
1,2,3,4,5,6,7
0,0,0,0,0,0,0
1,0,0,4,5,0,0
0,2,3,4,5,0,0
more: http://www.catonmat.net/blog/ten-awk-tips-tricks-and-pitfalls/#awk_ranges