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