파일 세트를 편집하고 관련 이름의 폴더에 저장하는 방법

파일 세트를 편집하고 관련 이름의 폴더에 저장하는 방법

이름이 "frames.XYZ.txt" 및 "index.XYZ.txt"로 구성된 54개의 파일이 있습니다.

모든 파일을 편집하고 싶습니다.

  1. 공백 문자인 첫 번째 열을 삭제합니다.
  2. 첫 번째 줄에서 첫 번째 문자(따옴표 문자이기도 함)와 마지막 문자(따옴표 문자이기도 함)를 삭제합니다.
  3. 공백 구분 기호를 쉼표로 바꿉니다.

예를 들어,

"frames.SGM.txt"라는 파일의 첫 번째 줄

 "tagsread pwread pwcol pwmin pwmax"
 10 0.32748740570260465 0.2833372980968762 0.3021673043683319 0.3484962315474369
 6 0.26616139593784266 0.28492773667197896 0.2269210356692535 0.30782630598198407
 3 0.29228070334103584 0 0.26073331696489527 0.30912215637906254
 1 0.3473179212993043 0 0.3473179212993043 0.3473179212993043
 11 0.21031628861286614 0.17075257758590717 0.06358843520605208 0.39186036744185854

그리고 "index.SGM.txt" 파일:

"frameini framelst boxnum boxoriginal L W H read tags tagsread readtime despX despY theta vhr ha hb d"
 0 2 2 2 0.762 0.508 0.508 1 19 19 0.054049999999999994 -0.024118623718731715 -0.08549821547541447 -0.517646968345433 1 3 1 3
 3 3 0 0 0.229 0.152 0.152 1 1 1 0.005980000000000001 0.02078112515691111 0.011339458730730879 -0.008791631073522673 1 3 1 3
 4 10 5 5 1.17 0.77 0.66 1 47 47 0.13178999999999996 0.24160268945952468 -0.17031344019338376 0.34959314590893964 0 3 1 3
 11 12 1 1 0.457 0.457 0.457 1 11 11 0.03328999999999999 0.07247402538161593 0.01825733790023088 0.023974909088602784 1 3 1 3
 13 25 6 6 0.915 0.915 0.915 1 87 87 0.23731999999999998 0.1611914340194872 -0.008643456696731612 -0.2777302231461403 1 3 1 3

두 파일 모두에서 각 줄의 첫 번째 문자는 공백이므로 제거하십시오.

그리고 나머지 부분을 편집하고 싶습니다.

tagsread,pwread,pwcol,pwmin,pwmax
10,0.32748740570260465,0.2833372980968762,0.3021673043683319,0.3484962315474369
6,0.26616139593784266,0.28492773667197896,0.2269210356692535,0.30782630598198407
3,0.29228070334103584,0,0.26073331696489527,0.30912215637906254
1,0.3473179212993043,0,0.3473179212993043,0.3473179212993043
11,0.21031628861286614,0.17075257758590717,0.06358843520605208,0.39186036744185854

그리고

frameini,framelst,boxnum,boxoriginal,L,W,H,read,tags,tagsread,readtime,despX,despY,theta,vhr,ha,hb,d
0,2,2,2,0.762,0.508,0.508,1,19,19,0.054049999999999994,-0.024118623718731715,-0.08549821547541447,-0.517646968345433,1,3,1,3
3,3,0,0,0.229,0.152,0.152,1,1,1,0.005980000000000001,0.02078112515691111,0.011339458730730879,-0.008791631073522673,1,3,1,3
4,10,5,5,1.17,0.77,0.66,1,47,47,0.13178999999999996,0.24160268945952468,-0.17031344019338376,0.34959314590893964,0,3,1,3
11,12,1,1,0.457,0.457,0.457,1,11,11,0.03328999999999999,0.07247402538161593,0.01825733790023088,0.023974909088602784,1,3,1,3
13,25,6,6,0.915,0.915,0.915,1,87,87,0.23731999999999998,0.1611914340194872,-0.008643456696731612,-0.2777302231461403,1,3,1,3

또한 폴더 이름이 "XYZ"인 다른 폴더에 저장하고 싶습니다. 예를 들어, 위의 편집된 두 파일 "frames.SGM.txt" 및 "index.SGM.txt"는 \SGM 디렉터리에 있어야 합니다.

XYZ 문자열의 변형이 27개 있으므로 이 27개의 디렉터리를 만들어야 합니다.

답변1

$ awk -v OFS=, '{gsub(/"/,""); $1=$1}1' frames.SGM.txt
tagsread,pwread,pwcol,pwmin,pwmax
10,0.32748740570260465,0.2833372980968762,0.3021673043683319,0.3484962315474369
6,0.26616139593784266,0.28492773667197896,0.2269210356692535,0.30782630598198407
3,0.29228070334103584,0,0.26073331696489527,0.30912215637906254
1,0.3473179212993043,0,0.3473179212993043,0.3473179212993043
11,0.21031628861286614,0.17075257758590717,0.06358843520605208,0.39186036744185854

/foo/bar그리고 파일 이름에 따라 지정된 다른 디렉터리에 출력을 배치합니다.

for file in *.txt; do
    dir="${file%.*}"
    dir="/foo/bar/${dir##*.}"
    mkdir -p "$dir"
    awk -v OFS=, '{gsub(/"/,""); $1=$1}1' "$file" > "$dir/$file"
done

답변2

awk '{gsub(/^ /,"",$0)}{gsub(" ",",",$0)} NR==1{gsub(/"/,"",$0)}1' filename

테스트 후 명령이 제대로 작동합니다.

답변3

스크립트는 다음과 함께 제공됩니다 sed.

for file in ./*.???.txt; do
    sed -i ''  's/^ //; 1s/^"//; 1s/"$//; s/ /,/g' $file
    dir=${file%.txt}
    dir=${dir##*.}
    mkdir -p "./$dir" && 
        mv -iv "$file" "./$dir"
done

관련 정보