파이프로 구분된 파일이 있습니다. 28개의 필드가 있습니다. 마지막 2개 필드를 제거하고 26개 필드만 인쇄해야 합니다.

파이프로 구분된 파일이 있습니다. 28개의 필드가 있습니다. 마지막 2개 필드를 제거하고 26개 필드만 인쇄해야 합니다.

파이프로 구분된 파일이 있습니다. 28개의 필드가 있습니다. 마지막 2개 필드를 제거하고 26개 필드만 인쇄해야 합니다.

이것은 마지막 3(26,27,28) 필드입니다.DC||0|

내가 원하는 출력은|DC|

답변1

POSIX 호환 sed의 경우:

sed 's/\([^|]*|\)\{2\}$//'

예를 들어:

$ echo 'foo|DC||0|' | sed 's/\([^|]*|\)\{2\}$//'
foo|DC|

답변2

그리고암소 비슷한 일종의 영양이상한:

awk '{NF=NF-3; NF++}1' FS='|' OFS='|' file

그러면 마지막 세 개의 열이 제거되고 빈 열이 추가됩니다.


바라보다:8개의 강력한 awk 내장 변수 – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

답변3

awk 'BEGIN{FS=OFS="|"} NF>2{NF-=2;$1=$1;print}'

awk 변형의 일부(전부는 아님!)에 대해서는 생략할 수 있습니다 $1=$1.

행에 3개 미만의 필드가 있는 경우 행이 전혀 인쇄되지 않습니다. 이는 빈 필드로 시작하는 행과 3개 미만의 필드로 시작하는 행 사이에 차이가 있는지 확인하는 유일한 방법입니다.

필드 구분 기호( FS)가 단일 공백이 아닌 경우 각 공백이 필드를 구분하고 빈 선행 및 후행 필드가 잘리지 않습니다.

이와 같은 줄에는 3개가 아닌 4개의 필드( , , , ) DC||0|가 있습니다 . = > 로 조인하면 마지막 2개 필드가 제거 됩니다 .DC<empty>0<empty>DC<empty>DC||

마찬가지로 와 같은 줄에는 1개가 아닌 3개의 필드( , , ) |DC|가 있습니다. 마지막 2개 필드를 제거하면 , 즉 빈 줄이 없게 됩니다 .<empty>DC<empty><empty>|

답변4

나는 그것을 사용했고 cut -d "|" -f 1-26 <filename>작동합니다.

관련 정보