디렉토리 이름 필드를 자르는 방법은 무엇입니까?

디렉토리 이름 필드를 자르는 방법은 무엇입니까?

이라는 파일이 있습니다 140905_M01771_0112_000000000-ABBYT. 세 번째 필드를 가져오고 싶습니다 0112. 나는 시도했다:

cut -d _ -f 3 131230_M01771_0032_000000000-A7874 

나에게 오류가 발생합니다 :

cut: 131230_M01771_0032_000000000-A7874/: Is a directory

답변1

명령줄에서 옵션 이외의 인수를 전달하는 경우 cut이는 데이터를 읽을 파일의 이름입니다. cutfile 의 데이터를 처리 하도록 요청하고 있는데 131230_M01771_0032_000000000-A7874, 이는 데이터가 포함된 파일이 아니라 디렉터리이기 때문에 오류가 발생합니다.

외부 유틸리티를 호출하는 대신 다음을 사용할 수 있습니다.쉘의 내장 매개변수 확장 구조.

dir="131230_M01771_0032_000000000-A7874"
third_field="${dir#*_}"; third_field="${third_field#*_}"; third_field="${third_field%%_*}"
echo "$third_field"

답변2

이제 작업하려는 이름을 알았으므로 해당 이름을 변수에 전달하고 변수를 cutSTDIN에 전달하면 됩니다. bash, ksh 또는 zsh에서 이 작업을 수행할 수 있습니다.

% dir='140905_M01771_0112_000000000-ABBYT'          

% cut -d_ -f3 <<<"$dir"                   
0112

또는 디렉토리 이름에 최소 3 _s 및 1 이 있는 -경우 for이름을 간단하게 구성하면 됩니다.

for dir in *_*_*_*-*; do cut -d_ -f3 <<<"$dir"; done

답변3

인수는 cut실제 정보가 아닌 잘라낼 정보가 포함된 파일의 이름입니다.

컷 정의 이외의 인수를 전달하지 않으면 컷할 정보에 대한 표준 입력을 찾습니다.

따라서 정보를 cut 명령으로 파이프하는 것이 더 합리적입니다. 예를 들어:

ls -1d -- *_*_*_* | cut -d _ -f 3

주어진 ls명령은 주어진 이름 패턴을 가진 모든 파일(디렉터리 포함)을 나열하고 결과 파일 목록은 cut명령에 의해 정리됩니다.

답변4

echo 140905_M01771_0112_000000000-ABBYT | cut -c 15,16,17,18

관련 정보