기존 파일에서 새 파일을 만들려고 하는데,입력.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
변경합니다 .sed
y///
답변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