#! /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