폴더의 파일을 반복하고 열의 선행/후행 공백을 제거합니다.

폴더의 파일을 반복하고 열의 선행/후행 공백을 제거합니다.

이 형식의 여러 파일이 포함된 폴더가 있습니다 >

1    Hello1    World1    Example1
2    Hello2    World2    Example2
...

구분 기호는 다음과 같습니다.\t

각 열의 선행/후행 공백이 있는 경우 이를 모두 제거하고 싶습니다.

1    Hello1\s    World1    \sExample1

( \s) <는 공간을 나타내며 예상되는 출력은 다음과 같습니다.

1    Hello1    World1    Example1

값에 공백이 포함될 수 있기 때문에 공백을 완전히 제거하고 싶지 않습니다(예: ) Hel lo.

또한 새 파일을 만드는 대신 현재 파일을 편집하고 싶습니다.

답변1

GNU sed를 사용하면 그림과 같이 tabb 주위의 모든 공백을 잘라낼 수 있습니다.

$ sed -Ei -e 's/[ ]*\t[ ]*/\t/g' file

awk를 사용하여 필드를 반복한 다음 필드를 자릅니다.

$ awk -F '\t' -v OFS='\t' '
{
  for (i=1; i<=NF; ++i) {
    gsub(/^[ ]+|[ ]+$/, "", $i)
  }
}1
' file > foo && mv foo file 

답변2

각 탭 주위에 공백을 허용하도록 FS를 설정한 다음 전체 레코드에서 선행/후행 공백을 제거한 후 모든 FS를 OFS로 바꾸는 필드에 할당합니다.

awk -F' *\t *' -v OFS='\t' '{gsub(/^ +| +$/,""); $1=$1} 1' file

수정된 입력을 사용하여 처리 중인 선행/후행 공백을 표시하고 cat -Evt탭 등을 표시합니다.

$ cat -Evt file
 1^IHello1 ^IWorld1^I Example1 $
2^IHello2^IWorld2^IExample2$

$ awk -F' *\t *' -v OFS='\t' '{gsub(/^ +| +$/,""); $1=$1} 1' file | cat -Evt
1^IHello1^IWorld1^IExample1$
2^IHello2^IWorld2^IExample2$

또한 코딩에서 창의력을 발휘하거나 I wish to edit the current file and not create a new one사용하지 않는 한 (예: 모든 입력을 배열로 읽고 수정하고 읽고 있는 파일을 닫은 다음 수정된 배열 내용을 해당 원본 파일에 다시 쓸 수 있음)라고 말씀하셨습니다 . 유형 매개변수를 사용하여 "내부 편집"을 수행한다고 주장하는 도구는 실제로 결과를 쓸 새 파일을 만든 다음 파일을 수동으로 작성한 것처럼 원본 파일을 새 파일로 덮어씁니다.edawk-icmd file > tmp && mv tmp

그런데 방금 설명한 것처럼 GNU sed 에서처럼 가상 내부 편집을 수행하려면 sed -i ...GNU awk에서도 이 작업을 수행할 수 있습니다.

awk -i inplace -F' *\t *' -v OFS='\t' '{gsub(/^ +| +$/,""); $1=$1} 1' file

만약 너라면정말임시 파일 없이 편집하고 싶은 경우 파일이 메모리에 들어갈 만큼 작은 경우 awk를 사용하여 다음을 수행할 수 있습니다.

$ cat -Evt file
 1^IHello1 ^IWorld1^I Example1 $
2^IHello2^IWorld2^IExample2$

$ cat tst.awk
BEGIN {
    FS = " *\t *"
    OFS = "\t"
}
{
    gsub(/^ +| +$/,"")
    $1 = $1
    recs[NR] = $0
}
END {
    close(FILENAME)
    for (i=1; i<=NR; i++) {
        print recs[i] > FILENAME
    }
}

$ awk -f tst.awk file

$ cat -Evt file
1^IHello1^IWorld1^IExample1$
2^IHello2^IWorld2^IExample2$

close(FILENAME)END 섹션이 입력될 때 입력 파일이 닫힐 것으로 예상하므로 이는 필요하지 않을 수도 있지만 문제가 되지는 않습니다.

관련 정보