잘라 내기 명령을 사용하여 여러 열 제거
주어진 입력
에코 1,2,3,4,5,6,7,8,9, ... 100
열 5를 자르고 싶다면 할 수 있습니다
컷 -d, -f-4,6-
5, 7 등과 같이 연속되지 않은 여러 열을 자르려면 어떻게해야합니까? 하나의 라이너가 있습니까?
기존 -f
사양 에서 직접 시퀀스를 계속할 수 있어야합니다 .
5와 7을 모두 건너 뛰려면 다음을 시도하십시오.
cut -d, -f-4,6-6,8-
단일 순차 열을 건너 뛰기 때문에 다음과 같이 작성할 수도 있습니다.
cut -d, -f-4,6,8-
계속 진행하려면 5, 7, 11을 건너 뛰려면 다음을 사용합니다.
cut -d, -f-4,6-6,8-10,12-
보다 명확한 관점으로 나타내려면 시퀀스 목록의 시작 / 끝에 각각 이동하는 시작 / 종료 열을 사용할 때 시각화하는 것이 더 쉽습니다. 예를 들어 다음은 열 5와 11을 건너 뛰고 열 2에서 20까지 인쇄합니다.
cut -d, -f2-4,6-10,12-20
따라서 "2-4", 5 개, "6-10", 11 개, "12-20"이 인쇄됩니다.
제외 할 필드를 생각하는 것이 더 쉽습니다.
잘리지 않는 필드 (출력에 유지되지 않음)의 수가 적 으면 --complement
플래그 를 사용하는 것이 더 쉬울 수 있습니다 . 예를 들어 3, 7, 12를 제외한 모든 필드 1-20을 포함하려면 다음과 같이하십시오.
cut -d, --complement -f3,7,12 <inputfile
보다는
cut -d, -f-2,4-6,8-11,13-
seq를 사용하여 모든 홀수 / 짝수 열을자를 수 있습니다.
이것은 모든 홀수 열을 인쇄합니다
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 1 2 10)
사용할 수있는 모든 짝수 열을 인쇄하려면
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(seq -s, 2 2 10)
두 번째 seq 수를 변경하여 인쇄 할 열을 지정할 수 있습니다.
인쇄 할 열 사양이 더 복잡한 경우 다음과 같은 "one-liner-if-clause"를 사용할 수도 있습니다.
echo 1,2,3,4,5,6,7,8,9,10 | cut -d, -f$(for i in $(seq 1 10); do if [[ $i -lt 10 && $i -lt 5 ]];then echo -n $i,; else echo -n $i;fi;done)
이렇게하면 1에서 5까지의 모든 열이 인쇄됩니다. 조건을 수정하여 열이 인쇄 될 날씨를 지정하는 더 복잡한 조건을 만들 수 있습니다.
Perl에서도 동일한 작업을 수행 할 수 있습니다.
1부터 시작하는 인덱싱 대신 0부터 시작하는 인덱싱을 사용하므로 필드 값이 1만큼 오프셋됩니다.
perl -F, -lane 'print join ",", @F[1..3,5..9,11..19]'
다음과 같습니다.
cut -d, -f2-4,6-10,12-20
출력에 쉼표가 필요하지 않은 경우 :
perl -F, -lane 'print "@F[1..3,5..9,11..19]"'
참고 URL : https://stackoverflow.com/questions/13690461/using-cut-command-to-remove-multiple-columns
'development' 카테고리의 다른 글
폴더 또는 JAR에서 런타임에 클래스를로드하는 방법은 무엇입니까? (0) | 2020.12.04 |
---|---|
새 셸 세션을 시작할 때마다 TMUX를 활성화하려면 어떻게해야합니까? (0) | 2020.12.04 |
Git Bash Shell이 심볼릭 링크를 생성하지 못함 (0) | 2020.12.04 |
Android Studio에서 링크 된 소스 폴더를 추가하는 방법은 무엇입니까? (0) | 2020.12.04 |
NumPy의 Convolve 이해 (0) | 2020.12.04 |