awk - 필드 - 리눅스 특정 열 출력




awk로 파일에서 첫 번째와 마지막 행을 제거하는 가장 쉬운 방법은 무엇입니까? (2)

나는 awk / gawk를 배우고있다. 그래서 최근에 나는 더 많은 연습 기회를 얻기 위해 모든 문제를 해결하려고 노력합니다.

나의 동료는 어제 질문을했다,

"파일에서 첫 번째 줄과 마지막 줄을 제거하는 방법"

. sed '1d;$d' file 이 작동한다는 것을 알고 있습니다. 또한 head/tail 은 성능이 좋지 않더라도 작동합니다. 나는 그에게 말했고, 그는 행복했다.

나중에, 나는 awk one-liner를 썼다 : 지금까지 나는 무엇을 얻었 는가?

awk 'NR>1{a[++k]=$0}END{for(i=1;i<k;i++)print a[i]}'

이렇게하면 전체 파일을 배열로 저장하여 마지막 행을 건너 뜁니다. 그 일을 더 쉽게 (또는 더 나은) 방법이 있어야한다고 생각합니다.

(더 쉽거나 빠르거나 더 좋은 방법이 없다면 나는 그 질문을 제거 할 것이다)

고맙습니다.


다른 방법이 있지만 gawk 함수 길이가 필요합니다.

awk '{firstline=2; cuttail=1; l[NR]=$0} END {for (i=firstline; i<=length(l)-cuttail; i++) print l[i]}'

다른 해결책을 제안하겠습니다. Top과 Bottom 라인에 커스텀 N이 필요한 경우 tailhead 커맨드를 사용할 수 있습니다 :

awk '{print $1}'  | head -n -1 | tail -n+2

head -n -1 - 마지막 행을 제거합니다.

tail -n + 2 - 두 번째 줄에서 출력 시작 (1 줄 제거)

다음 명령은 상단과 하단에서 3 줄을 제거합니다 :

awk '{print $1}'  | head -n -3 | tail -n +4

사실 awk도 필요 없습니다.

more | head -n -1 | tail -n +2

또는

cat | head -n -1 | tail -n +2

코멘트를위한 Igor Fobia 에 감사드립니다!