awk批量修改文件名,awk用法

今天尝试了编个批量修改文件时间的程序,发现没有必要,直接用date -t 201311200000.30 file* 就能实现。


今天用awk把昨天的三个程序合并为一个,如下

#!/bin/sh
ls
echo "Which file's name you want to change?"
read name
file={ ls  | grep "$name" }
ls  | grep "$name"
echo "Do you want to change them?  Y/N"
read answer
case $answer in
[Yy]|[Yy][Ee][Ss])
if [ -f $file ]
then
echo "what to change?"
read new
ls -l | grep "$name" | awk '{m=$9;gsub(/'$name'/,"'$new'",$9);print "mv "m" "$9}'
ls -l | grep "$name" | awk '{m=$9;gsub(/'$name'/,"'$new'",$9);print "mv "m" "$9}'|sh
else
echo "no such file"
fi
;;
[Nn]|[Nn][Oo])
echo "exiting"
;;
*)
echo "invalid answer"
;;
esac
好处是不但可以修改文件前边或后边的相同名,还可以修改中间的名,目前没有完善,粗粗可以执行


date "+%Y%m%d" 可显示数字格式的当前年月日

echo ${n:0:3} 这个表示取变量n字符串的一段,从第一个开始算3位截取

awk '/^(J|L)/' file 这个表示读file时,当该行第一个字母为J或L时打印全行

awk '{print ($1<50) ? "OK "$1 : "error "$1}' file

读取file,当该行第一个数小于50时,显示"OK"并输出变量$1,否则显示"error"并输出变量$1

awk '{/^A/,/B$/}' file 打印file中以A字母开头到以B字母结束的内容

awk '{if ($1<4) print $1"小于4"}' file 读取file,当每行第一个参数小于4时输出变量$1小于4

awk '{if ($1<100) print $1"小于100";else print $1"大于等于100"}' file

读取file,当每行第一个参数小于100输出变量$1小于100,否则输出变量$1大于等于100

awk '{if ($1<100) {i++;print $i}}'  file

读取file,当每行第一个参数小于100时,变量i累加,并打印出第i位参数


你可能感兴趣的:(awk用法)