需求
描述
将字段逆序输出文件nowcoder.txt的每一行,其中每一字段都是用英文冒号: 相分隔。
假设nowcoder.txt内容如下:
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
你的脚本应当输出
/usr/bin/false:/var/empty:Unprivileged User:-2:-2:*:nobody
/bin/sh:/var/root:System Administrator:0:0:*:root
题解
- awk 用
space
操作符 拼接 - awk 变量 字符串,字段引用区分
awk -F : '{str=$NF;{do{NF--;str= NF==0 ? str : (str space ":" $NF);}while(NF>0)};print str}' nowcoder.txt
sed
- 追加编辑文件内容
sed -i '$a # This is a test' regular_express.txt
- sed 多行操作
Next 命令(N):将数据流中的下一行加进来创建一个多行组来处理。
Delete(D):删除多行组中的一行。
Print(P):打印多行组中的一行。
sort
- n 数值 r 反序 t 切割 k 指定列
awk '/tcp/{a[$NF]++;} END {for(k in a){print a[k],k}}' 29.txt | sort -nr -k 1 -t " "
等价
awk '/tcp/{a[$NF]++;} END {for(k in a){print a[k],k}}' 29.txt | sort -nrk 1