처음 n 개와 마지막 n 개 열을 자르는 방법?
탭으로 구분 된 파일에서 처음 n 개와 마지막 n 개 열을 어떻게 잘라낼 수 있습니까?
나는 이것을 처음 n 열 을 자르려고 시도했습니다 . 하지만 첫 번째와 마지막 n 열을 결합 할 생각이 없습니다.
cut -f 1-10 -d "<CTR>v <TAB>" filename
Cut은 -f
다음 에서 여러 범위를 취할 수 있습니다 .
최대 4 개 및 7 개 이상의 열 :
cut -f -4,7-
또는 필드 1,2,5,6 및 10부터 :
cut -f 1,2,5,6,10-
기타
AWK를 사용하여 첫 번째 및 마지막 필드를 자르려면 :
awk '{$1 = ""; $NF = ""; print}' inputfile
불행히도 필드 구분 기호가 남아 있으므로
aaa bbb ccc
된다
[space]bbb[space]
여분의 공백을 남기지 않지만 요구 사항에 맞는 방식으로 kurumi의 답변을 사용하여 이렇게하려면 :
awk '{delim = ""; for (i=2;i<=NF-1;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile
이것은 또한 그 대답의 몇 가지 문제를 해결합니다.
이를 일반화하려면 :
awk -v skipstart=1 -v skipend=1 '{delim = ""; for (i=skipstart+1;i<=NF-skipend;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile
그런 다음 명령 시작 부분에서 변수 할당을 변경하여 시작 또는 끝에서 건너 뛸 필드 수를 변경할 수 있습니다.
다음,
-d를 사용하여 잘라낼 수 있습니다 : delimiter, 필드의 경우 -f
탭으로 구분 된 필드에 사용되는 \ t
cut -d$'\t' -f 1-3,7-
이를 위해 Bash를 사용할 수 있습니다.
while read -a cols; do echo ${cols[@]:0:1} ${cols[@]:1,-1}; done < file.txt
질문의 첫 번째 부분은 쉽습니다. 이미 지적했듯이 cut은 열 범위의 시작 또는 끝 인덱스를 생략하여 "시작에서 열 n (포함)"또는 "열 n (포함)에서 끝까지 "를 의미하는 것으로 해석합니다. 각기:
$ printf 'this:is:a:test' | cut -d: -f-2
this:is
$ printf 'this:is:a:test' | cut -d: -f3-
a:test
또한 범위 결합 을 지원 합니다. 원하는 경우, 예를 들어 7 개 열의 행에서 처음 3 개 및 마지막 2 개 열 :
$ printf 'foo:bar:baz:qux:quz:quux:quuz' | cut -d: -f-3,6-
foo:bar:baz:quux:quuz
그러나 질문의 두 번째 부분은 기대하는 입력의 종류에 따라 약간 까다로울 수 있습니다. "마지막 n 개 열"이 "마지막 n 개 열 (전체 행의 인덱스에 관계없이)"을 의미하는 경우 (즉, 미리 찾을 열 수를 반드시 알 필요가 없기 때문에) 슬프게도 이것은 그렇지 않습니다. cut
혼자서도 가능합니다 . 효과적으로 사용하기 위해 cut
"최종 인발 N의 각 라인에서 열"의 총 개수 의 열을 미리 알고 있어야 각 행에 존재하는, 그리고 , 각 라인에 포함 열의 수에 일치해야한다.
당신이 경우에 하지 얼마나 많은 "열"을 알고 각 라인에 존재할 수있다 (예를 들면 엄격 표 아니다 입력하면있는 거 작업이 있기 때문에), 다음과 같은 사용 뭔가해야합니다 awk
대신. 예를 들어, 입력의 각 줄에서 awk
마지막 2 개의 "열"(awk는 필드를 호출하며 그 개수는 줄마다 다를 수 있음)를 꺼내는 데 사용 합니다 .
$ printf '/a\n/a/b\n/a/b/c\n/a/b/c/d\n' | awk -F/ '{print $(NF-1) FS $(NF)}'
/a
a/b
b/c
c/d
awk를 사용할 수 있습니다. 예를 들어 첫 번째, 두 번째 및 마지막 3 개 열을 잘라냅니다.
awk '{for(i=3;i<=NF-3;i++} print $i}' file
Ruby (1.9+)와 같은 프로그래밍 언어가있는 경우
$ ruby -F"\t" -ane 'print $F[2..-3].join("\t")' file
다음을 시도하십시오.
echo a#b#c | awk -F"#" '{$1 = ""; $NF = ""; print}' OFS=""
참고 URL : https://stackoverflow.com/questions/4956873/how-to-cut-first-n-and-last-n-columns
'programing' 카테고리의 다른 글
"COM Interop 등록"대 "어셈블리 COM 표시" (0) | 2020.11.15 |
---|---|
배낭 문제가 의사 다항식 인 이유는 무엇입니까? (0) | 2020.11.15 |
Chrome이 어떤 글꼴을 사용하고 있는지 어떻게 알 수 있습니까? (0) | 2020.11.15 |
iTerm2 : 비활성 창 디밍 중지 (0) | 2020.11.14 |
Android 스튜디오가 소스 폴더를 인식하지 못함 (0) | 2020.11.14 |