텍스트 파일의 형식을 다시 지정하는 명령을 실행합니다.
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' filename.txt > seqXXX.txt
매번 명령을 입력할 필요가 없도록 이것을 스크립트로 어떻게 바꿀 수 있습니까? 이 작업을 수행하는 방법에 대한 기사를 읽었지만 더 혼란스럽습니다.
답변1
이를 수행하는 방법은 스크립트로 변환하려는 명령 부분에 따라 다소 다릅니다. 다음과 같은 세 가지 변형을 제공합니다.
- 프로그램
awk
자체가 스크립트 역할을 합니다. - 명령은 전체적으로 스크립트 역할을 합니다.
- 이 명령은 쉘 기능으로 작동합니다.
이 awk
프로그램은 다음과 같이 스크립트로 바뀔 수 있습니다
#!/usr/bin/awk -f
BEGIN { FS = "," }
{
if ($6 < 0)
print $1$2," "$3$4,$5$6
else
print $1$2," "$3$4$5,$6
}
먼저 필드 구분 기호를 쉼표로 설정한 다음 각 입력 줄에서 코드 블록을 실행합니다.
여기에 사용된 -line을 사용 하면 스크립트 파일을 실행할 때 마치 명령줄에 작성한 것처럼 실행 #!
됩니다 . awk -f script.awk
첫 번째 줄에 사용된 경로는 awk
시스템의 올바른 인터프리터를 가리키도록 조정되어야 합니다(의 출력 참조 command -v awk
).
chmod +x script.awk
다음을 사용하여 파일을 실행 가능하게 만든 후
$ ./script.awk filename.txt >seqXXX.txt
이 명령은 다음과 같이 쉘 스크립트에 넣을 수 있습니다.
#!/bin/sh
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' "$@"
여기서는 기본적으로 명령을 쉘 스크립트로 이식했습니다. 명령 "$@"
끝에 있는 비트는 awk
스크립트에 제공하는 명령줄 인수(단지 단일 입력 파일의 이름일 수도 있음)로 대체됩니다.
이 실행 파일을 만든 후에는 다음과 같이 사용할 수 있습니다.
$ ./script.sh filename.txt >seqXXX.txt
파일명이 다음과 같은 경우변화 없는절대 변경하지 말고 스크립트에도 넣으세요.
#!/bin/sh
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' filename.txt >seqXXX.txt
그런 다음 추가 매개변수나 리디렉션 없이 명령줄에서 스크립트를 호출합니다.
명령을 셸 함수로 변환할 수 있습니다. 이는 별칭과 거의 비슷하지만 일반적으로 좀 더 유연합니다.
myreformat () {
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' "$@"
}
이는 일반적으로 쉘 별칭 등을 넣는 위치에 배치됩니다( 쉘을 ~/.bashrc
사용하는 경우 아마도 거기에 있을 것입니다). bash
이 기능은 다음에서 사용할 수 있습니다.다음시작한 쉘 세션.
위의 쉘 스크립트 변형과 거의 동일한 방식으로 호출됩니다.
$ myreformat filename.txt >seqXXX.txt