源代码如下:
#!/bin/bash
c=7
echo "输入移动距离"
read -p "input a val:" a
echo $a
awk '{print $3}' POSCAR > sj.txt #打印第三列
tail -n +9 sj.txt > sj1.txt # 输出 c轴坐标
awk -v val=$c ' $1>val {print $1}' sj1.txt > sj2.txt #筛选需要移动的坐标
cat sj2.txt | sort | uniq > sj3.txt #去掉重复坐标
#echo 23
for y in $(cat sj3.txt)
do
#echo 24
k=$(echo $y | tr -d $'\r') #输出字符串由回车 bc计算会报错 需删掉回车
d=$(echo $k+$a| bc)
#echo $d
sed -i "s/$k/$d/g" `grep $k -rl POSCAR`
done
echo ok
其中 有一个报错 由bc发出 信息如下
(standard_in) 1: illegal character: ^M
原因是由 for 从文件输出的字符有回车需要删掉:参考于: