파일이 탭으로 구분됩니다. 각 줄의 탭 수를 계산하는 powershell 스크립트를 원합니다. 나는 이걸 생각해 냈다.파일의 각 줄에있는 탭 수를 계산하는 Oneliner
${C:\tabfile.txt} |% {$_} | Select-String \t | Measure-Object | fl count
그러면 파일의 줄 수는 3이다.
내가 잘못하고있는 것에 대한 안내는 없습니까? 파일의 각 줄에 단일 번호를 인쇄하고 싶습니다.
파일이 탭으로 구분됩니다. 각 줄의 탭 수를 계산하는 powershell 스크립트를 원합니다. 나는 이걸 생각해 냈다.파일의 각 줄에있는 탭 수를 계산하는 Oneliner
${C:\tabfile.txt} |% {$_} | Select-String \t | Measure-Object | fl count
그러면 파일의 줄 수는 3이다.
내가 잘못하고있는 것에 대한 안내는 없습니까? 파일의 각 줄에 단일 번호를 인쇄하고 싶습니다.
코드와 관련된 몇 가지 문제는 그룹화/배열 관리/중첩 루프를 중심으로합니다.
gc test.txt | % { ($_ | select-string `t -all).matches | measure | select count }
첫 번째 시도, 매우 정교한하지 :
gc .\tabfile.txt | % { ($_ -split "`t").Count - 1 }
내가 탭 문자의 문자열을 분할 할 때, 나는 탭에서이보다 하나 개 더 항목과 배열을 얻을거야, 여기에 사실을 활용 선.
또 다른 방법, 피 분할 선 :
gc .\tabfile.txt | % { ([char[]] $_ -eq "`t").Count }
문자열이 char[]
에 캐스트 할 수 (또한 ToCharArray()
방법이있다), 그때는 비교 연산자가 반환하여, 컬렉션에서 다르게 작동한다는 사실을 사용하고 있습니다 부울 대신 모든 일치하는 항목 그래서 거기의 비교는 항목 수를 얻는 데 필요한 원래 줄의 모든 탭을 포함하는 배열을 반환합니다.
char []에 캐스팅 한 다음 -eq를 사용하여 배열을 자동으로 언 롤 (unrol)합니다. +1 –
Powershell을 사용하여 코드 골프를 시도하면 그 장점이 있습니다 :-) – Joey
이것은 아마도 "더 나은"대답 일지 모르지만 다른 게시물은 내 원래의 질문에 더 잘 대답합니다. – JasonHorner
또 다른 옵션 :
$content = Get-Content file.txt | Out-String
[regex]::matches($content,"\t").count
그리고 또 다른 옵션은 V2를 실행하는 경우.
select-string \t c:\tabfile.txt -All |
%{"$($_.matches.count) tabs on $($_.LineNumber)"}
+1. 그의 원래 코드가 작동하지 않는 이유에 대한 좋은 설명. 아마도 그냥 솔루션을 제공하는 것 이상으로 도움이 될 것입니다 :-) (또한 저는 그것을했을 것입니다. 그러나 Select-String을 결코 사용하지 않았습니다 :-)) – Joey
scriptblock을 사용할 때 여전히 혼란 스럽습니다. 또한 두 솔루션 모두 $ {file.txt}로 파일을 소비하는 대신 gc를 사용한다는 것이 스타일의 문제인지 보았습니다. – JasonHorner
'$ {...} '을 사용할 때 중괄호 사이에 완전한 절대 경로를 넣어야하는 반면'Get-Content'는 상대 경로를 사용할 수 있습니다. 나에 관해서는, 나는'C : \'에 주위에 거짓말을하는 사용자 파일이 없기 때문에'$ {C : \ Users \ me \ ...} '와 같이 항상 귀찮을 것이다. 'Home :'드라이브를 만들었지 만 절대 경로가 싫다. 또한'Get-Content'는 무언가를 찾을 수 없을 때 예외를줍니다. 때때로 이상한 오류를 디버깅 할 때 유용합니다 :-) – Joey