保留变量中的空格并与SED交换

时间:2018-04-18 14:06:56

标签: linux shell tcsh

我已经阅读过几十篇文章,但到目前为止我还找不到合适的解决方案。

我需要在文本文件中交换6个坐标,该文本文件被格式化为LS-Dyna输入 - 字段由10位数的列标识,其中内容必须在列中右对齐:

我从这样的事情开始(文件内容" test.txt"):

*DEFINE_BOX_TITLE
Anonymous BOX Card
$234567890      
$    BOXID       XMN       XMX       YMN       YMX       ZMN       ZMX
%box%
$

所需的最终结果如下(应存储在test2.txt中):

*DEFINE_BOX_TITLE
Anonymous BOX Card
$234567890      
$    BOXID       XMN       XMX       YMN       YMX       ZMN       ZMX
%   807777      2458      3658     -1056       144       552      1752
$

到目前为止我的脚本:

#!/bin/tcsh 
###


set boxid = 807777
set xmin = 2458
set xmax = 3658
set ymin = -1056
set ymax = 144
set zmin = 552
set zmax = 1752


set box = `echo "$boxid $xmin $xmax $ymin $ymax $zmin $zmax" | awk '{printf("%-1s%9d%10d%10d%10d%10d%10d%10d\n","%",$1,$2,$3,$4,$5,$6,$7)}'`

echo  "$box"

cat test.txt | sed "s/%box%/$box/g" > test2.txt

我的问题:

变量"框中的必要空格"消失,输出看起来像这样:

% 807777 2458 3658 -1056 144 552 1752

......而不是这样:

%   807777      2458      3658     -1056       144       552      1752

你们能想出怎么做的想法吗?

我非常感谢任何暗示:)

1 个答案:

答案 0 :(得分:0)

使用printf代替awk

#!/bin/tcsh 
###

set boxid = 807777
set xmin = 2458
set xmax = 3658
set ymin = -1056
set ymax = 144
set zmin = 552
set zmax = 1752

set box = "`printf '%%%9s%10s%10s%10s%10s%10s%10s\n' \
                   $boxid $xmin $xmax $ymin $ymax $zmin $zmax`"

echo  "$box"

sed "s/%box%/$box/g" test.txt > test2.txt

运行它, test2.txt 的内容为:

*DEFINE_BOX_TITLE
Anonymous BOX Card
$234567890      
$    BOXID       XMN       XMX       YMN       YMX       ZMN       ZMX
%   807777      2458      3658     -1056       144       552      1752
$