2013-12-08 2 views
3

줄 바꿈으로 구분 된 텍스트 묶음이있는 파일이 있습니다.명령 줄에서 다단계 텍스트 조작을 수행 하시겠습니까?

ex. 그 줄에 X보다 더 많은 문자가있는 경우

"This is sentence 1.\n" 
"This is sentence 2.\n" 
"This is sentence 3. It has more characters then some other ones.\n" 
"This is sentence 4. Again it also has a whole bunch of characters.\n" 

나는, 다음, 각 라인에 대해, 각 행의 문자 수를 계산합니다 명령 줄 도구의 일부 설정을 사용할 수 있도록 원하고, 마침표 (".")로 분리 한 다음 분할 선의 각 요소에있는 문자 수를 계산하십시오.

ex. 행 번호의 최종 출력의 :

1. 24 
2. 24 
3. 69: 20, 49 (i.e. "This is sentence 3" has 20 characters, "It has more characters then some other ones" has 49 characters) 

wc 만 입력 파일 이름을 취한다, 그래서에 글자 수를 할 수있는 텍스트 문자열에 걸릴 그것에게 그것을 지시하는 데 문제

head -n2 processed.txt | tr "." "\n" | xargs -0 -I line wc -m line 

나에게 오류 제공하지 않습니다 : "오픈 : 그런 파일이나 디렉토리"

+0

안녕하세요. tag * command-line *은 너무 일반적입니다. 응답은 쉘마다 다르므로 사용중인 쉘을 정확하게 지정해야합니다. 이 경우 bash 또는 sh + POSIX 유틸리티 인 것으로 보입니다. –

+0

* wc는 파일 이름 *을 입력으로받습니다. 실제로는 stdin에서 작동 할 수 있습니다. 'echo hello | wc -c' – damienfrancois

+0

조금 늦었습니다.하지만 제안에 감사드립니다! –

답변

2

awk가 이에 적합합니다. 아래의 코드는 당신이 시작해야하며 나머지 해결할 수 :

awk -F. '{print length($0),NF,length($1)}' yourfile 

출력 : 필드 구분 기호로 마침표를 사용

23 2 19 
23 2 19 
68 3 19 
70 3 19 

가 (. -F가)의 길이를 출력을 전체 줄 ($ 0), 필드 수 (NF) 및 첫 번째 필드 길이 ($ 1). 여기

전체 라인과 각 필드의 길이를 인쇄 작은 다른 예이다

echo -n "Hello" | wc -c 
5 
: "WC"그런데

awk -F. '{print $0;for(i=0;i<NF;i++)print length($i)}' yourfile 
"This is sentence 1.\n" 
23 
19 
"This is sentence 2.\n" 
23 
19 
"This is sentence 3. It has more characters then some other ones.\n" 
68 
19 
44 
"This is sentence 4. Again it also has a whole bunch of characters.\n" 
70 
19 
46 

를 같이 표준 입력 전송 문자열을 처리 할

0

을하는 방법에 대해 :

head -n2 processed.txt | tr "." "\n" | wc -m line 

xargs의 기능과 파이프 작동 방식을 더 잘 이해해야합니다. = 그들을 사용하기 전에 그들에 좋은 튜토리얼에 대한 Google 마십시오.

xargs은 각 유틸리티를 다음 유틸리티로 따로 전달합니다. 이것은 당신이 원하는 것이 아닙니다 : 당신은 wc으로 모든 라인을 여기에서 얻고 싶습니다. 따라서 전체 출력을 tr으로 지정하십시오.

관련 문제