쉘 스크립트를 사용하여 파일을 읽고 프로젝트 이름을 기반으로 2개의 새 파일을 만듭니다.

쉘 스크립트를 사용하여 파일을 읽고 프로젝트 이름을 기반으로 2개의 새 파일을 만듭니다.

나는 다음 문서를 가지고 있습니다:-

====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Safeda
Location    Delhi

====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54
Quantity    2
Quantity    4
Quantity    6
Quantity    76
Quantity    0
Quantity    99
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30


====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Alphonso
Location    Mumbai


====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70
Quantity    3
Quantity    23
Quantity    43
Quantity    734
Quantity    2
Quantity    929
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

이제 위 파일의 Mango 이름을 기반으로 하는 두 개의 입력 파일이 필요합니다. 예를 들면 다음과 같습니다.- 파일 이름:-safeda.txt

TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54
Quantity    2
Quantity    4
Quantity    6
Quantity    76
Quantity    0
Quantity    99
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

두 번째 파일 이름:-Alphonso.txt

TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70
Quantity    3
Quantity    23
Quantity    43
Quantity    734
Quantity    2
Quantity    929
Price   50
Price   70
Price   40
Price   30
Price   40
Price   30
Price   20
Price   60
Price   70
Price   80
Price   90
Price   30
Price   30

쉘 스크립트를 사용하여 이 두 파일을 생성해야 합니다.

답변1

한 가지 방법은 다음과 같습니다.

$ awk '(/=====/){a=0}
       (/\(Result\)\s*$/){a=1; next} 
       ($1=="Name"){n=$2}
       (a==1){print >> n".txt"}' file 

설명하다

  • (/=====/){a=0}: 현재 행이 일치하는 경우 로 ======설정됩니다 .a0
  • (/\(Result\)\s*$/){a=1; next}: if the current line ends with(결과) 1` followed by 0 or more whitespace, set을 입력 to하고 다음 줄로 점프합니다.
  • ($1=="Name"){n=$2}: 첫 번째 필드가 이면 변수를 두 번째 필드의 값으로 Name설정합니다 .n
  • (a==1){print >> n".txt": a그렇다면 확장자가 (name)인 파일에 이 줄을 인쇄합니다 1.n.txt

답변2

#!/bin/bash

filename=""
do_write=0

while read line
do
  case $line in
    ==*Result*) do_write=1
                ;;
      ==*Test*) do_write=0
                filename=""
                ;;
         Name*) [[ $do_write == 0 ]] && filename=${line#Name }.txt
                ;;
            "") # Skip blank lines
                ;;
             *) [[ $do_write == 1 ]] && echo "$line" >> $filename
  esac
done

입력 파일을 사용하십시오.

$ head -10 input
====== 20160606:034441 ====== Mango(Test)
TestName     MangoT
Row  0
Season N
Name Safeda
Location    Delhi

====== 20160606:034441 ====== Mango(Result)
TestName     MangoR
Result  0

결과는 다음과 같습니다.

$ ./parse < input

$ ls
Alphonso.txt  input  parse   Safeda.txt

$ head Alphonso.txt
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    5
Quantity    3
Quantity    1
Quantity    0
Quantity    7
Quantity    8
Quantity    70    

$ head Safeda.txt
TestName     MangoR
Result  0
No_of_Mango 13
Quantity    2
Quantity    3
Quantity    6
Quantity    0
Quantity    1
Quantity    9
Quantity    54

관련 정보