【发布时间】:2016-06-19 06:59:57
【问题描述】:
我有一个 2 列格式的点坐标列表,第一列 x 轴,第二列 y 轴,我想编写一个脚本来重新缩放轴。
输入文件示例
4 3
3 6输出文件示例(重新缩放为 10 10)
10 5
7.5 10
为此,我首先获取两列上的最大坐标(使用 sort、head 和 cut),然后使用 perl 替代正则表达式插入所有行。
所以我编写了这样的脚本:
#!/bin/sh
# run: $ ./normalize x y input_file output_file
X=$1
Y=$2
INPUT=$3
OUTPUT=$4
BIGGEST_FIRST_COLUMN=$(sort -nrk1 $INPUT | head -n1 | cut -d ' ' -f 1)
BIGGEST_SECOND_COLUMN=$(sort -nrk2 $INPUT | head -n1 | cut -d ' ' -f 2)
PERL_CMD="'s!([\d.]+)\s([\d.]+)!(\$1/$BIGGEST_FIRST_COLUMN*$X).\" \".(\$2/$BIGGEST_SECOND_COLUMN*$Y)!e'"
CMD="perl -pe $PERL_CMD $INPUT > $OUTPUT"
echo "Run the following cmd : "
echo $CMD
$CMD
这段代码输出了我要运行的perl onliner,然后尝试运行。 此时,perl oneliner 正在工作:我可以复制粘贴它并手动运行它,它会给出正确的输出。然而,当脚本自动运行时,我遇到了一个错误:
Can't find string terminator "'" anywhere before EOF at -e line 1.
我想这是由于我对 shell 中的" 和' 的理解有些问题,但目前我不知道......所以如果你有任何提示,欢迎
【问题讨论】: