끝부터 계산하여 텍스트 줄에서 필드를 잘라내(선택)하는 방법은 무엇입니까?

끝부터 계산하여 텍스트 줄에서 필드를 잘라내(선택)하는 방법은 무엇입니까?

잘라내기 명령을 사용하여 행에서 필드를 선택하는 방법을 알고 있습니다. 예를 들어, 다음 데이터가 제공됩니다.

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o

이 명령은 다음과 같습니다.

cut -d, -f2 # returns the second field of the input line

반품:

b
g
l

내 질문: 두 번째 필드를 선택하는 방법계산끝부터? 이전 예에서 결과는 다음과 같습니다.

d
i
n

답변1

cut반전 전후에 입력을 사용하십시오 rev.

<infile rev | cut -d, -f2 | rev

산출:

d
i
n

답변2

이 시도:

awk -F, '{print $(NF-1)}' file.txt

또는 사용:

perl -F, -lane 'print $F[-2]' file.txt

또는 사용(작업을 해주신 Manat에게 감사드립니다):

ruby -F, -lane 'print $F[-2]' file.txt

또는 다음을 사용하십시오 bash(manatwork 덕분에):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt

또는 사용:

cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'

답변3

sed를 사용하세요:

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

산출:

d
i
n

설명하다

  • ([^,]*,)*쉼표가 뒤에 오는 쉼표가 아닌 문자의 개수에 관계없이 일치합니다. 즉, 열 개수에 관계없이 일치합니다.
  • ([^,]*)열을 일치시킵니다.
  • (,[^,]*){1}끝의 세 번째 열과 일치 {1}하도록 수량자를 변경하는 경우 끝에 있는 하나의 열과 일치합니다 .{2}

관련 정보