awk를 사용하여 특정 열만 처리하고 구분된 텍스트 파일의 머리글과 바닥글을 무시하는 방법은 무엇입니까?

awk를 사용하여 특정 열만 처리하고 구분된 텍스트 파일의 머리글과 바닥글을 무시하는 방법은 무엇입니까?

다음과 같은 입력 텍스트 파일이 있습니다 text.txt.

Header
Column1|Column2|Column3
C11|C12|C13
C21|C22|C23
C31|C32|C33
Footer

내 출력은 다음과 같아야합니다

Column1|Column3
C11|C13
C21|C23
C31|C33

현재 제가 사용하고 있는 명령어는

awk -F "|" 'BEGIN{NR > 1; OFS = "|"}{print $1, $3}' text.txt > text2.txt

NR > 1Header가 첫 번째 줄이므로 무시 하면 어떨까요 ?

또한 마지막 줄을 어떻게 무시할 수 있습니까?

답변1

awk -F '|' -vOFS='|' '/^Header|^Footer/ {next} ; {print $1, $3}' text.txt

일치하는 행을 건너뛰 ^Header거나 ^Footer다른 모든 행의 열 1과 3을 인쇄합니다.

필드 구분 기호(FS)와 출력 필드 구분 기호(OFS)가 모두 로 설정됩니다 |.

답변2

어쩌면 다음과 같은 것을 사용할 수도 있습니다( a.txt입력 포함).

 head --lines=-1 a.txt | tail --lines=+2 | awk -F "|" '{print $1"|"$2}'

head --lines=-1마지막 행을 제외한 모든 것을 인쇄합니다.
tail --lines=+2모든 것을 인쇄하지만 두 번째 행에서 시작하여
awk -F "|" '{print $1"|"$3}'첫 번째 및 세 번째 열을 가져옵니다.

결과 :

Column1|Column3
C11|C13
C21|C23
C31|C33

관련 정보