이라는 파일이 있습니다 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
이는 데이터를 읽을 파일의 이름입니다. cut
file 의 데이터를 처리 하도록 요청하고 있는데 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
이제 작업하려는 이름을 알았으므로 해당 이름을 변수에 전달하고 변수를 cut
STDIN에 전달하면 됩니다. 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