다음과 같은 파일이 여러 개 있습니다. (실제로는 80개가 있습니다.)
파일 1.dat
2 5
6 9
7 1
파일 2.dat
3 7
8 4
1 3
두 번째 줄을 모두 포함하는 파일로 만들고 싶습니다. 즉
출력 데이터
6 9
8 4
지금까지 내가 가지고 있는 것은 파일 이름을 통해 반복되지만 그 이전의 파일을 덮어씁니다. 예를 들어 위 파일의 출력은 다음과 같습니다.
8 4
내 쉘 스크립트는 다음과 같습니다.
애프터.sh
TEND = 80
TINDX = 0
while [ $TINDX - lt $TEND]; do
awk '{ print NR==2 "input-$TINDX.dat > output.dat
TINDX = $((TINDX+1))
done
답변1
while
루프를 제거 하고 FNR
내장 awk
변수와 함께 쉘 중괄호 확장을 사용하십시오.
awk 'FNR==2{print $0 > "output.dat"}' file{1..80}.dat
답변2
sed
충분할 것입니다:
sed -sn 2p file{1..80}.dat > output.dat
-s
각 파일의 두 번째 줄을 인쇄하는 옵션이 필요합니다. 그렇지 않으면 첫 번째 파일의 두 번째 줄만 인쇄됩니다.
답변3
무엇에 대해서
head -n 2 input.dat | tail -n 1 | awk
......
답변4
이를 수행하는 방법에는 분명히 여러 가지가 있습니다. 제 생각에는 제가 좋아하는 것 같습니다.@aragaer의 sed 답변이 최고입니다.
다음은 bash 내장만 사용하고 외부 유틸리티를 파생할 필요가 없는 프로그램입니다.
for f in file{1..80}.dat; do
{ read && read && printf "%s\n" "$REPLY"; } < "$f"
done > output.dat