重命名不同的文件

重命名不同的文件

我存储这样命名的文件: word-word2-word3-word4.txt 。 “字数”的数量因文件而异。

我想用加号替换某些破折号,例如 word+word2-word3+word4.txt

我想通过输入数字来指定要更改的破折号或减号。

我有一个不起作用的尴尬脚本 - 它的作用是:

  • 破折号补充有分号,以供以后 awk 分割之用
  • 用户输入数字指定要替换的破折号
  • 数字附加到文件名末尾,例如 aaa-;bbb-;ccc.txt 1 3
  • 并通过管道输入 awk 进行处理
  • 在 awk 中,创建一个附加数字的数组,
  • 以及第一个字段上有分割的单词数组
  • 然后在拆分数组上使用数字数组指定索引,使用 gsub ';' 表示 '+'

这是我的可怕脚本,它对文件名进行硬编码,以便快速摆弄和试验。我不知道如何有效地退出 awk 脚本。计划是退出 awk 并在 sed 中进行最后的替换。

我很清楚这是一个狗晚餐的剧本,显示出很多学习不佳的地方。尽管如此,如果您愿意,请提供任何帮助。

file='wot-;wit-;wet-;wat.txt'; 
echo -n "type digits"; 
read nos; varr=$(echo $nos); 
newfile=$(echo $file $varr); 
echo "$newfile" | awk '{ for (i=2; i<=NF ;i++) arr[i]=$i}
                         END{ split($1,spl,"-");
                              for( var in arr ) gsub(";","+", spl[var]); 
                              print THIS IS NOT WORKING - CAN'T GET ANYTHING USEFUL OUT }'

答案1

我不知道,但我知道+ 的awk方式:shellsed

file='wot-;wit-;wet-;wat.txt'; 
echo -n "type digits : "; 
read nos; 
# this is used to sort numbers in order, otherwise the script
# will work only when user specifies numbers in right order
# also we delete all non-numbers string to make sed code safe enough
nos="$(echo $nos|tr ' ' '\n'|sort -n|grep -v '[^0-9]'|tr '\n' ' ')"
# here we build sed code and modify the text
echo "$file" | { for i in $nos ; do A="s/-/+/$i;$A" ; done ; sed "$A" ; }

相关内容