쉘 명령을 사용하여 파일에서 열 또는 여러 열을 제거하는 방법은 무엇입니까?


14

내 파일

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하고 WERT내 입력 파일에서.


어떤 두 열을 정말로 제거 하시겠습니까? 귀하의 출력은있다 INFO_NAMPROCID삭제
신경

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -t멋지게 포맷 할 수 있습니다.
cuonglm

답변:


28

6 번째 와 8 번째 열을 인쇄하지 마십시오

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

16

이것은 스택 오버플로의 다른 곳에서 이미 답변되었습니다.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk 또는 명령 줄에서 리눅스

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

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

사용 cut하는 것도 가능합니다 .

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

3
에 대한 예를 cut들거나 언급하지 않습니까?
Drav Sloan

7
간단히 말해 : --complement옵션 cut은 여기에서 편리 할 수 ​​있습니다. 즉, 6 개를 선택하지 않고 2 개의 필드를 제거하십시오.cut -f6,8 --complement file
Fiximan

awk가 작동하는 중입니다 ...하지만 무슨 일이 일어나고 있는지 ... 형식이 변경되었습니다. ... 그냥 필드를 가져 가지만 정확한 구조는 아닙니다 ... 잘라내 기가 작동하지 않습니다 ... @AndreiR
pmaipmui

나는 이것을 시도했다 cut –c1-45,55-58. 그러나 이것을 실행하기 전에 총 문자 수를 계산해야합니다. 하지만 내 입력 형식으로 같은과 열을 인쇄하고 싶어
pmaipmui

@ Nainita 공간이 아닌 다른 구분 기호가있을 수 있습니다. awk에서는이를 지정해야합니다 (예 : 테이블 형식이면 -F "\ t"사용). cut을 사용하려면 -d (쉼표를 사용하는 경우 cut -d)를 사용해야합니다.
AndreiR

2

printf각 필드의 형식을 유지하는 데 사용하십시오 . 각 필드의 길이는 x 자이며 빼기 기호는 문자열을 왼쪽으로 정렬합니다.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.