#! /bin/bash
for (( l = 1 ; l <= 50; ++l )) ; do
for (( k = 1 ; k <= 1000; ++k )) ; do
sed -n '$l,$lp' $k.dat >> ~/Escritorio/$l.txt
done
done
스크립트는 각각 50줄의 텍스트를 포함하는 1000개의 dat 파일이 있는 폴더에 있습니다.
dat 파일의 이름은 1.dat
, 2.dat
,....,1000.dat
내 목적은 l 라인 , l 라인 등이 l.txt
있는 파일을 만드는 것입니다 . 이를 위해 명령을 사용하여 각 dat 파일의 l 파일을 선택합니다.l.txt
1.dat
2.dat
sed
그런데 위의 스크립트를 실행하면 생성된 txt에는 아무것도 들어있지 않습니다...
실수는 어디에 있습니까?
답변1
for LINE in {1..50}; do
for FILE in {1..1000}; do
sed -n "${LINE}p" "${FILE}.dat" >>"~/Escritorio/${LINE}.dat"
done
done
스크립트에서 sed 표현식에 작은따옴표를 사용하고 있으며 변수는 작은따옴표 안에서 확장되지 않으므로 큰따옴표를 사용해야 합니다.
또한 동일한 작업을 수행할 수 있는 awk가 포함된 하나의 라이너도 있습니다.
awk 'FNR<=50 {filename=sprintf("results/%d.dat", FNR); print >> filename; close(filename)}' *.dat
결과 디렉터리를 만들거나 명령에서 다른 디렉터리로 변경하면 ~
해당 디렉터리가 홈으로 확장되지 않습니다.
답변2
이 awk 명령은 어때요? 작은 dat 파일 세트로 시도해보십시오
awk '{file=FNR".txt"; print $0 > file}' *.dat