awk에서 두 번째 마지막 열 / 필드 인쇄
두 번째 마지막 열 또는 필드를 awk로 인쇄하고 싶습니다. 필드 수는 가변적입니다. 사용할 수 있어야 $NF
하지만 어떻게 사용할 수 있는지 잘 모르겠습니다.
그리고 이것은 작동하지 않는 것 같습니다 :
awk ' { print ( $NF-- ) } '
awk '{print $(NF-1)}'
작동해야합니다
Chris Kannon의 작은 추가 답변 : 실제로 두 번째 마지막 열이있는 경우에만 인쇄하십시오.
(
echo | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 3 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
)
가장 간단합니다 :
awk '{print $--NF}'
원본 $NF--
이 작동하지 않는 이유는 표현식이 감소 전에 평가되기 때문입니다. 반면 접두사 감소는 평가 전에 수행되기 때문입니다.
awk ' { print ( $(NF-1) ) }' file
당신은 결과에서 멀지 않았습니다! 이것은 그것을한다 :
awk '{NF--; print $NF}' file
이것은 하나의 필드 수를 감소시켜 $NF
이전의 두 번째 를 포함합니다.
테스트
몇 개의 숫자를 생성하고 5 개의 그룹으로 인쇄 해 봅시다 :
$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12
각 줄에 두 번째를 인쇄 해 봅시다 :
$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11
Chris Kannon의 awk 솔루션과 비슷한 Perl 솔루션 :
perl -lane 'print $F[$#F-1]' file
다음과 같은 명령 줄 옵션이 사용됩니다.
n
입력 파일의 모든 줄을 반복하고 모든 줄을 자동으로 인쇄하지는 않습니다.l
처리하기 전에 줄 바꿈을 제거하고 나중에 다시 줄 바꿈a
자동 분할 모드 – 입력 라인을@F
어레이 로 분할합니다 . 공백으로 기본 분할e
펄 코드를 실행
자동 @F
분할 배열은 인덱스 [0]에서 시작하는 반면 awk 필드는 $ 1로 시작합니다.
$#F
요소의 개수입니다@F
rev 명령을 사용하여 오른쪽에서 왼쪽으로 시작하려고 했습니까? 이 경우 두 번째 열만 인쇄하면됩니다.
seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev
4
9
11
먼저 값을 줄인 다음 인쇄하십시오.
awk ' { print $(--NF)}' file
또는
rev file|cut -d ' ' -f2|rev
열이 많고 마지막에 세 개의 cloum을 제외한 모든 열을 인쇄하려는 경우 도움이 될 수 있습니다.
awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }'
참고URL : https://stackoverflow.com/questions/2096490/print-second-last-column-field-in-awk
'Programming' 카테고리의 다른 글
Python : 유니 코드 이스케이프 된 문자열에서 .format () 사용 (0) | 2020.06.07 |
---|---|
Ansible 사전 정의 된 변수 목록을 어디서 얻을 수 있습니까? (0) | 2020.06.07 |
C #에서 문자열을 DateTime으로 구문 분석 (0) | 2020.06.07 |
CERT / PEM 인증서를 PFX 인증서로 변환 (0) | 2020.06.05 |
C ++ 코드 / 프로젝트에서 메모리 누수를 찾는 방법은 무엇입니까? (0) | 2020.06.05 |