AWK의 필드 구분 기호

AWK의 필드 구분 기호

다음과 같은 기록이 포함된 txt 파일이 있습니다.

cat,bdb awq,sdcsidsjo hhhd 
xs,dun,hat ase, xsdfc
xd,yu,nor acc,cuiov dfvgf

아래 단어(공백 다음 두 번째 열)만 출력하고 싶습니다.

awq
ase
acc


awk '{print $2}'awk 'BEGIN {print $2} { FS="," }'같은 명령을 시도했지만 아무것도 작동하지 않았습니다. 누구든지 얻는 방법을 알 수 있습니까?awk '{print $2 FS=","}'awk 'BEGIN{ORS=",";} {print $2}'

첫 번째 열의 질문을 편집했습니다. awk 'BEGIN { FS="," } {print $2}' 를 사용하면 쉼표가 있습니다.

내가 얻은 결과는 bdb dun yu

하지만 결과가 awq ase acc로 표시되기를 원합니다.

누구든지 결과를 얻는 방법을 알 수 있습니까?

답변1

(새로운 질문으로 업데이트됨)

다음 쉼표까지 공백 뒤의 첫 번째 단어를 추출하려는 것 같습니다.

$ awk -F ' ' '{ split($2,a,","); print a[1] }' <file
awq
ase
acc

이는 데이터를 공백으로 구분된 것으로 처리한 다음 공백으로 구분된 두 번째 필드를 가져와 명시적으로 쉼표로 분할하고 해당 결과의 첫 번째 결과 문자열을 인쇄합니다.

또는 다음을 사용하십시오 sed.

$ sed 's/^[^ ]* //; s/,.*$//' <file
awq
ase
acc

이는 두 개의 대체를 사용하여 먼저 첫 번째 공백 앞의 비트를 제거한 다음 쉼표 내의 비트를 제거합니다. 나머지 문자열을 인쇄합니다.

답변2

Command: for i in `echo "cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf" | awk -F "," '{print $1,$2,$3}'`;   do echo $i | awk '/^a/{print $0}'; done|tr "\n" " "

입력하다

cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf

산출

주문하다

for i in `echo "cbdb awq,sdcsidsjo hhhd xsdunh ase, xsdfc xdyun acc,cuiov dfvgf" | awk -F "," '{print $1,$2,$3}'`;   do echo $i | awk '/^a/{print $0}'; done|tr "\n" " "

산출

awq ase acc

관련 정보