기존 파일에서 한 줄에 두 개의 값을 가져옵니다.

기존 파일에서 한 줄에 두 개의 값을 가져옵니다.

기존 파일에서 새 파일을 만들려고 하는데,입력.txt, Unix 명령을 사용합니다.

문서입력.txt

type ABC=home,3,test,data
type EFG=data,2,test_new,data_load

type PQR=load,2,test_type,data_loader

예상되는출력.txt

Name,number
ABC,3
EFG,2
PQR,2

나는 노력하고있다

input.txt | awk -F" "'Print $2' | awk -F","'Print $2' > output.txt

그러나 예상한 결과를 얻지 못합니다. 어떻게 해결할 수 있나요?

답변1

넌 할 수있어:

$ awk -F'[ =,]' 'BEGIN{ OFS=","; print "Name","number"; }/./{print $2,$4}' input.txt 
Name,number
ABC,3
EFG,2
PQR,2

답변2

태그를 사용한 이후 sed:

{
    echo Name,number
    sed -e '/./!d' \
        -e 'h; s/[^,]*,//; s/,.*//' \
        -e 'x; s/^type //; s/=.*//' \
        -e 'G; y/\n/,/' input.txt
} >output.txt

이것은 먼저 echo헤더를 출력하는 데 사용됩니다. 그런 다음 명령은 sed모든 빈 줄을 제거하고 나머지 각 줄에서 필요한 데이터를 추출합니다. 출력은 에 기록됩니다 output.txt.

필요한 데이터를 추출하기 위해 sed스크립트는 먼저 .txt 파일을 사용하여 원래 입력 줄의 복사본을 예약된 공간에 저장합니다 h. 그런 다음 첫 번째 쉼표 앞과 다음 쉼표 뒤의 모든 항목을 제거하여 숫자를 얻습니다. 그런 다음 예약된 공간에서 저장된 줄을 바꾸고 x문자 앞에 레이블을 가져오는 것과 유사한 작업을 수행합니다 =. 그런 다음 두 결과를 결합 하고 이 명령을 사용하여 삽입된 줄 바꿈을 쉼표로 G변경합니다 .sedy///

답변3

space/=/를 개행 문자로 바꾸어 패턴 공간에 나타나지 않도록 하세요. 세 번째 표시를 복원한 다음 패턴 공간을 잘라 두 번째와 네 번째 필드를 눈에 띄게 만듭니다. 그런 다음 P를 통해 인쇄하세요.

sed -ne '
  1{x;s/^/Name,Number/p;x;}
  /[^[:space:]]/!d
  y/ =,/\n\n\n/;s/\n/,/3
  s/.*\n\(.*\)\n.*,/\1,/;P
' input.txt

산출:

Name,Number
ABC,3
EFG,2
PQR,2

관련 정보