awk - 여러 .dat 파일의 두 번째 줄을 하나의 파일로 출력합니다.

awk - 여러 .dat 파일의 두 번째 줄을 하나의 파일로 출력합니다.

다음과 같은 파일이 여러 개 있습니다. (실제로는 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

관련 정보