디렉토리의 이 부분을 어떻게 구성하고 파일로 잘라낼 수 있습니까?

디렉토리의 이 부분을 어떻게 구성하고 파일로 잘라낼 수 있습니까?

나의 주요 목표는 디렉토리의 내용을 복사하여 파일로 보내는 것입니다. 그런 다음 이름만 포함하도록 디렉터리 위치를 잘라냅니다. 그런 다음 내용을 정리하면 대부분이 나타납니다. 이것도 과제입니다. 제 제한은 명령이어야 한다는 것입니다.

이게 가능할 줄 알았는데 안되더라구요

wc -l ~location/folder/folder/*.log > ~/log.info | cut -d "/" -f9 ~/log.info | sort

내 결과물

1 /s/s/s/s/location/folder/folder/a.log
1 /s/s/s/s/location/folder/folder/b.log
1 /s/s/s/s/location/folder/folder/c.log
3 /s/s/s/s/location/folder/folder/d.log
2 /s/s/s/s/location/folder/folder/e.log

내가 원하는 것

1 a
1 b
1 c
2 e
3 d

답변1

원하지 않는 비트를 모두 제거하기 위해 출력을 파이프할 수 있습니다 sed.

wc -l ~location/folder/folder/*.log > ~/log.info
cut -d "/" -f9 ~/log.info | sort | sed 's_/.*/__;s_\.log$__'

답변2

어때요?

perl -e 'print sort map {s/(\d).*(\w)\..*//r} <>' 

(Perl 5.14+ 필요 - 시스템에 이미 설치되어 있을 수 있음)

인라인 Perl 코드를 사용하십시오.

  • <>STDIN 또는 명령줄에 지정된 파일을 읽습니다 .
  • (\d)대체 정규식을 사용하여 앞에 있는 숫자 와 문자를 캡처하세요 .. (\w)\.
  • 그런 다음 변환된 문자열을 반환합니다. r정규식 플래그.
  • map반복을 위해 STDIN.
  • 그리고 sort...글쎄, 정리됐어.
  • 그리고 print인쇄하세요.

산출:

1 a
1 b
1 c
2 e
3 d

또는:

perl -e '%x=map {open($f,'<',$_); @f=<$f>; $_=>''.@f} @ARGV;print "$x{$_} $_\n" for sort {$x{$a}<=>$x{$b}} keys %x;' ~location/folder/folder/*.log 

답변3

wc … > ~/log.info | cut ~/log.info | …

파이프의 양쪽이 평행하게 실행됩니다. wc매우 빠르게 완료되고 cut매우 느리게 시작 되지 않는 한 , cut읽을 때 ~/log.info여전히 비어 있거나 심지어 존재하지 않을 가능성이 높습니다 . 문제를 더욱 복잡하게 만들기 위해 리디렉션 sort도 병렬로 수행되고 파일도 잘립니다.

이 중간 임시 파일로 무엇을 하려는지 이해할 수 없습니다. 작동하지 않았습니다.

wc -l ~location/folder/folder/*.log | cut -d "/" -f9 | sort > ~/log.info

대상 디렉터리로 전환하는 것이 더 쉽습니다.

{ cd ~location/folder/folder && wc -l -- *.log; } | sort > ~/log.info

관련 정보