我存储这样命名的文件: 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
方式:shell
sed
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" ; }