次の履歴を含むファイルがあります。
DL2016-12-02P123456 PW5038 1234561180118 123456O00400010180421 0755480 HEALTH B NOT APPLICABLE NOT APPLICABLE 2016-08-012016-12-022016-09-012016-08-312016-09-302016-09-012016-09-30949569014 PW5018 07554800010001089200001 00100010892 00000010304MDIRECT 00000000000000000000{ HPS PW5018COCOAA007708200000010304DXQ7262016001
各行の 385-396 フィールドと 415-427 フィールドの値を書式設定したいと思います。たとえば、00000010304M 000000000000{
このコマンドcut -c 385-396,415-427 --output-delimiter=" "
ファイルを使用した後です。参照00000010304M 000000000000{
ガイドなどに従って返されますM = -1
。ご覧のとおり、位置396のデータはであり、位置427のデータはとに似ている必要があります。ここで、Mは-1に置き換えられます。ここで - 記号は先頭に配置され、1はM位置に配置されます。また、小数点以下2桁です。{ = +2
N = +3
M
{
-0000001030.41
+00000000000.05
Last Character in Input Field|Positive or Negative|Last Number|Incoming Field|Value after replacement
{ + 0 12345{ 1234.5
A + 1 12345A 1234.51
B + 2 12345B 1234.52
C + 3 12345C 1234.53
D + 4 12345D 1234.54
E + 5 12345E 1234.55
F + 6 12345F 1234.56
G + 7 12345G 1234.57
H + 8 12345H 1234.58
I + 9 12345I 1234.59
} - 0 12345} -1234.5
J - 1 12345J -1234.51
K - 2 12345K -1234.52
L - 3 12345L -1234.53
M - 4 12345M -1234.54
N - 5 12345N -1234.55
O - 6 12345O -1234.56
P - 7 12345P -1234.57
Q - 8 12345Q -1234.58
R - 9 12345R -1234.59
ファイルにフィールド番号 396 に M が含まれている場合は、次のデータ列を使用して現在のファイルに置き換えることを示します。 00000010304Mが-0000001030.44に変更されることを意味します。参考文献では、これをM-4 12345M -1234.54とマークすることがわかります。たとえば、M文字は前に - 記号が付いている4に変わり、12345Mの代わりに-1234.54のようになります。
答え1
開始したとおりに続行できますが、cut
必要に応じてより多くの部分に分けることができます。アイデアを提供するために、各行の最初の部分を変換する短い部分があります。
cut -c 385-394,395,396 | \
while read integral dec suffix
do case $suffix in
'{');; # Nothing
A) last=1;;
B) last=2;;
...
'}') sign=-;;
J) sign=- last=1;;
...
esac
echo $sign$integral.$dec$last
done
あなたは理解しました。cut
2番目の数字も含めるようにフィールドを展開します。
別のファイルを使用して最後の文字を翻訳したい場合は、grep
このインライン検索ではなくそのファイルの内容を使用できます。