我已经阅读过几十篇文章,但到目前为止我还找不到合适的解决方案。
我需要在文本文件中交换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
你们能想出怎么做的想法吗?
我非常感谢任何暗示:)
答案 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
$