쉘 명령을 사용하여 파일에서 하나 이상의 열을 삭제하는 방법은 무엇입니까?

쉘 명령을 사용하여 파일에서 하나 이상의 열을 삭제하는 방법은 무엇입니까?

입력하다:

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT  INFO_NAM WERT PROCID
-------- -------- -------- -------- -------- -------- ---- ------
15MinAvg AIRSS    33-GIS   DMDMGIS1 I        MvAvr15m 1123  CP
15MinAvg AIRSS    33-GIS   DMDMGIS1 P        MvAvr15m 2344  CP
15MinAvg AIRSS    33-GIS   DMDMGIS1 Q        MvAvr15m 4545  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 I        MvAvr15m 6576  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 P        MvAvr15m 4355  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 Q        MvAvr15m 6664  CP

산출:

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT WERT
-------- -------- -------- -------- ------- ----
15MinAvg AIRSS    33-GIS   DMDMGIS1 I       1123
15MinAvg AIRSS    33-GIS   DMDMGIS1 P       2344
15MinAvg AIRSS    33-GIS   DMDMGIS1 Q       4545
15MinAvg AIRSS    33-GIS   DMDMGIS2 I       6576
15MinAvg AIRSS    33-GIS   DMDMGIS2 P       4355
15MinAvg AIRSS    33-GIS   DMDMGIS2 Q       6664

내 입력 파일에서 두 개의 열 합계를 제거하고 싶습니다 INFO_NAM.PROCID

답변1

열을 완전히 삭제하는 대신 열을 지우려면 다음을 수행하세요.

6 열과 8 열 은 인쇄하지 마세요 .

awk '{$6=$8=""; print $0}' file

답변2

이 질문은 이전에 Stack Overflow의 다른 곳에서 답변되었습니다.

awk나는 이것이 최선이라고 믿습니다 .

awk '{print $1,$2,$3,$4,$5,$7}' file

cut도 가능.

cut -f1,2,3,4,5,7 file

답변3

열을 삭제하는 가장 좋은 방법은 다음과 같습니다 cut.

cut --complement -d' ' -f6,8 file

설명하다:

  • -d이 경우 구분 기호를 지정합니다.
  • --complement지정된 열을 제외한 열 유지-f
  • -f잘라낼 열을 지정합니다( --complement이 경우에는 유지할 열이 아닌 열 6과 8).

~에서컷 매뉴얼 페이지:

  -d, --delimiter=DELIM
        use DELIM instead of TAB for field delimiter

  -f, --fields=LIST
         select only these fields;  also print any line that contains
         no delimiter character, unless the -s option is specified

  --complement
         complement the set of selected bytes, characters or fields

다른 사람들은 유사한 구조를 사용하도록 제안했지만 awk '{$2=$4=""; print $0}'구분 기호가 공백이 아닌 경우에는 작동하지 않습니다. 이는 필드의 내용을 빈 문자열로 만들지만 필드를 완전히 제거하지는 않습니다. 예를 들어, echo "a|b|c|d|e" | awk -v FS='|' -v OFS='|' '{$2=$4=""; print}'수확량 a||c||e.

답변4

Perl 솔루션을 기꺼이 받아들이고 싶다면...

perl -ane 'printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $F[0], $F[1], $F[2], $F[3], $F[4], $F[6])' file

다음 명령줄 옵션을 사용하세요.

  • -n각 줄을 자동으로 인쇄하지 않고 입력 파일의 각 줄을 반복합니다.

  • -a자동 분할 모드 – 입력 행을 @F 배열로 분할합니다. 기본적으로 공백으로 분할

  • -e다음 Perl 코드를 실행하십시오.

관련 정보