여러 열과 행이 있는 파일이 있는데 세 번째 열의 마지막 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