2013-04-16 3 views
-1

내 문제는이 다음이다 예를 들어, 여러 파일 (이상적으로는 와일드 카드 사용)에 대해 출력 줄 127 만 볼 수있게하는 명령.표시 명령 줄에서 여러 파일을 하나의 라인

이것은 파이썬이나 이와 비슷한 방식으로 작성하는 것이 매우 쉽습니다. 일반적인 쉘 명령을 사용한 간단한 방법이 있는지 궁금했습니다.

참고 : 하나의 파일로이 작업을 수행하는 간단한 방법은 (로 아래 지적)입니다

head -n 127 filename | tail -n 1 

그러나 이것은 여러 파일을 실패합니다.

확인, 단지 bash는 루프가 옵션임을 깨달았 :

for i in `ls $1`; 
    do echo $i; head -n $2 $1 | tail -n 1; 
done; 

이 구문을 실행하는

AWK와 또한
source lineno.sh 127 filenames 
+0

그런 쉘 스크립트를 소싱하는 것이 재밌습니다. 'lineno.sh 127 filenames' 파일을 실행하고 실행 시키십시오. '$ HOME/bin' 디렉토리에'.sh' 명령을 쓸 때'lineno 127 filenames' 만 실행하면됩니다. –

답변

1

가 :

awk 'FNR==127 {print FILENAME ":" $0; nextfile}' *.tex 
1

그것은 재미 보인다 그런 쉘 스크립트를 소싱하는 것. 그것을 실행하고 실행 : 나는 그래서 간단하게 실행할 수 있습니다 내 $HOME/bin 디렉토리에 같은 명령을 배치 할 때

lineno.sh 127 filenames 

나는 .sh을 제거 :

lineno 127 filenames 

스크립트는 차선이다; 당신은 그와 같은 ls을 사용하지 않아야합니다 (공백이나 다른 특수 문자가 포함되어 있으면 파일 이름에 즐거운 지옥이 생깁니다).

#!/bin/sh 
line=${1:?} # Complains if there is no $1 or if it is an empty string 
shift 
for file in "[email protected]" 
do 
    echo "$file"; 
    head -n $line "$file" | tail -n 1 
done 

아마 (적어도 하나의 제 2 인수에 주장, 올바른 사용을보고하기 위해)하지만 합리적으로 작동 검사 인수를 강화할 것입니다.

관련 문제