다음과 같은 기록이 포함된 파일이 있습니다.
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
두 번째 숫자도 포함하도록 필드를 확장합니다 .
별도의 파일을 사용하여 마지막 문자를 번역하려는 경우 grep
이 인라인 조회 대신 해당 파일의 콘텐츠를 사용할 수 있습니다.