파일 이름에 따라 파일의 내용이 변경되는 스크립트를 준비하고 싶습니다.
FileName이 있고 ABC_20161027220153.txt
파일 내용이 다음과 같다고 가정합니다.
2000|2000_ABC|04|||0000000000||
아래와 같이 파일 내용이 변경되는 스크립트를 만들고 싶습니다.
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||
어떻게 해야 하나요?
답변1
이를 위해서는 몇 가지 단계가 있었습니다:
- awk는 변수의 현재 파일 이름을 알고 있습니다.
FILENAME
- 파일 이름을 디코딩된 요소로 분할하지 않은 경우(각 새 입력 파일의 첫 번째 줄에서 수행되도록 여기에 하드 코딩됨) 함수를 사용하여
substr
도움을 줍니다. |
이전에 명령문에 의해 기호로 분할된 각 입력 행에 대해BEGIN
필드 4와 5를 새 값으로 바꿉니다.- 재구성된 라인을 인쇄하다
모두 정리하면('abc.awk'로 이름 지정):
BEGIN { OFS=FS="|" }
{
if (FNR == 1) {
f4=substr(FILENAME, index(FILENAME, "_") + 1, 8);
f5a=substr(FILENAME, index(FILENAME, "_") + 9, 6);
f5=substr(f4, 7, 2) "." substr(f4, 5, 2) "." substr(f4, 1, 4) " " \
substr(f5a, 1, 2) "." substr(f5a, 3, 2) "." substr(f5a, 5, 2);
}
$4=f4
$5=f5
print $0
}
$ awk -f abc.awk ABC_20161027220153.txt
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||