두 개의 파일이 있습니다. 두 파일의 내용은 동적이며 필요할 때 시스템에 의해 생성됩니다.
첫 번째 파일에는 다음과 같은 의미를 갖는 특정 줄 번호가 포함되어 있습니다.
head simdb.txt
MSISDN
Account_ID
COSP_ID
Currency
Language
Home_Zone
SIM_PIN
Screening_PIN
Third_ParAnothercess_PIN
Cumulative_Incorrect_PIN
다른 파일에는 다음과 같은 동적 데이터가 포함되어 있습니다.
head subscriber.txt
0='917598936722' 4='ENG' 6='1234'
출력은 다음과 같아야 합니다.
0='917598936722' //MSISDN
4='ENG' //Language
6='1234' //SIM_PIN
질문이 업데이트되었습니다 ========
위의 쿼리에 추가하여 subscriber.txt에 여러 줄이 있는 경우 스크립트가 먼저 줄을 인쇄한 다음 원하는 출력을 인쇄하도록 하려면 어떻게 해야 합니까? 예를 들어, 다음과 같은 subscriber.txt 파일이 있는 경우
head subscriber.txt
0='917598936722' 4='ENG' 6='1234'
0='919654680634' 4='ENG' 6='1234'
그러면 원하는 출력은 다음과 같습니다.
0='917598936722' 4='ENG' 6='1234'
0='917598936722' //MSISDN
4='ENG' //Language
6='1234' //SIM_PIN
===========================================
0='919654680634' 4='ENG' 6='1234'
0='919654680634' //MSISDN
4='ENG' //Language
6='1234' //SIM_PIN
답변1
awk 'NR==FNR
{Arr[NR-1]=$0;
next}
{for(i=1;i<=NF;i++)
{split($i,a,"=");
print $i " //"Arr[a[1]]}
}'simdb.txt subscriber.txt
- simdb.txt의 모든 줄을 읽고 배열에 보관합니다. 인덱스는 0부터 시작
- 두 번째 파일을 읽고 등호 앞의 값이 무엇인지 확인하세요.
- Arr에서 값을 읽고 인쇄합니다.
답변2
awk 'FNR==NR { for (i=1; i<=NF; ++i) {
split($i, a, "=")
s[a[1]+1] = $i }; next }
FNR in s { printf("%-20s//%s\n", s[FNR], $0) }' subscriber.txt simdb.txt
먼저 더 짧은 파일의 필드를 읽고 subscriber.txt
해당 값을 배열에 할당합니다 s
. 배열 s
은 각 필드 앞의 숫자 =
(1 더하기)로 입력됩니다.
파일을 읽을 때 simdb.txt
파일의 줄 번호가 테스트됩니다. 해당 줄 번호가 배열의 키인 경우 s
원하는 출력이 생성됩니다. 출력은 왼쪽으로 정렬된 문자열(데이터)에 20자를 할당하고 그 뒤에 해당 특정 행에 대해 보유된 데이터를 할당하는 printf
형식화된 문자열을 통해 수행 됩니다.simdb.txt
//
subscriber.txt
질문의 데이터 출력을 제공합니다.
0='917598936722' //MSISDN
4='ENG' //Language
6='1234' //SIM_PIN