모든 행의 특정 열에서 마지막 5개 문자열을 자르는 방법

모든 행의 특정 열에서 마지막 5개 문자열을 자르는 방법

여러 열과 행이 있는 파일이 있는데 세 번째 열의 마지막 5개 문자열을 잘라서 추가 열에 인쇄해야 합니다. 예를 들어:

1 info1 AAAAAAAAAAA
2 info23 TTTTTTTTTT
3 ingo45  ATATATATATATAT
4 info67 GGGYYYYUUUUUUU

내 결과는 다음과 같습니다

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

다음을 통해서만 세 번째 열을 잘라낼 수 있습니다.

cat input_file | cut -f3 | grep -o '.\{5\}$' > output_file

하지만 원래 테이블을 유지하고 싶습니다. 어떤 제안이 있으십니까?

답변1

짧은AWK방법:

awk '{ $(NF+1)=substr($NF, length($NF)-4) }1' input-file
  • $NF- 마지막 필드 값

  • $(NF+1)- 마지막 필드가 됩니다(초기 마지막 필드 이후 $NF).

  • length($NF)-4- 시작 위치/오프셋 가져오기5- 캐릭터 슬라이싱


산출:

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

----------

문자열 교체를 통해 동일한 효과를 얻을 수 있습니다.

awk '{ sub(/.{5}$/, "& &") }1' input-file
  • /.{5}$/- 레코드 끝의 마지막 5개 문자와 일치합니다.

  • &- 일치하는 전체 시퀀스를 가리킵니다.

답변2

sed를 사용하여 &문자열을 바꾸는 두 가지 예:

$ sed 's/.\{5\}$/& &/' file
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

관련 정보