선택적 필드를 인쇄하려면 첫 번째 열 지침을 따르세요.

선택적 필드를 인쇄하려면 첫 번째 열 지침을 따르세요.

awk원본 파일을 엉망으로 만들지 않고 지침의 첫 번째 열에 따라 여러 명령을 동시에 인쇄 하려는 파일이 있다고 가정해 보겠습니다. 이는 두 개의 개별 인쇄에서 발생하므로 다음과 같습니다.

문서:

End 1st 2nd 3rd
Fin 1st 2nd 3rd

다음 명령을 한 줄로 결합하고 싶습니다.

awk '$1 ~ /^E/ {print $2}'
awk '$1 ~ /^F/ {print $3}'

다음 출력을 얻습니다.

End 1st
Fin 2nd

편집하다 "원본 파일을 망친다"는 것은 다음과 같습니다.

파일 1:

E1   NAME1 LASTNAME1
FA   22   1992         #age, year
FC   UK   London       #country, city
FJ   IT   HP           #job, company
E2   NAME2 LASTNAME2
FA   25   1989        
FC   CH   Geneva      
FJ   CS   SIB    

이제 두 개의 별도 awk 인쇄를 실행하면 파일 3의 정보를 파일 2의 이름과 일치시킬 수 없습니다(특히 필드 수가 ^F동일하지 않은 경우).

awk '$1 ~ /^E/ {print $2}' File 1 > File 2

출력(파일 2):

NAME1
NAME2

awk '$1 ~ /^F/ {print $3}' File 1 > File 3

출력(파일 3):

1992        
London       
HP           
1989        
Geneva      
SIB  

그러나 (답변에서 제안한 대로) 여기에 참여하면 다음과 같은 결과를 얻을 수 있습니다.

예상 출력:

NAME1
1992        
London       
HP  
NAME2
1989        
Geneva      
SIB  

답변1

awk '$1 ~ /^E|^F/ {if ($1 == "End") print $1" "$2; if ($1 == "Fin") print $1" "$3}'

또는

awk '/^End/{print $1" "$2}/^Fin/{print $1" "$3}'

(감사해요지드)

작동해야합니다.

답변2

이것은 작동합니다

awk '/^F/{$2=$3}NF=(NF-2)' file

E도 일치시키려는 경우(파일에 다른 내용이 있는 경우)

awk 'a=/^F/{$2=$3}{x=/^E/}(x||a)&&NF=(NF-2)' file

답변3

노력하다:

awk '$1 ~ /^E/ {print $1,$2;next};$1 ~ /^F/ {print $1,$3}' file

답변4

예상 출력의 경우,

awk '/^E/{$0=$2} /^F/{$0=$3}1' file

첫 번째 필드도 인쇄하려면

awk '/^E/{$0=$1 FS $2} /^F/{$0=$1 FS $3}1' file

관련 정보