이전 sed 명령어와 마찬가지로 아래의 포스트 내용 요약 및 추가한 것이다.
https://likegeeks.com/awk-command/
awk 명령어는 sed 명령어 보다 데이터를 조작하기에 더 강력하며, 로그파일 등 백만개의 줄로 이루어진 파일을 읽을 수 있는 수준으로 만드는 데에 큰 강점을 가지고 있다.
awk 명령어를 가지고 할 수 있는 것은 아래와 같다.
- 변수 선언.
- 문자열 연산과 수학적 연산 사용.
- 제어 흐름 및 반복문.
- 형식화된 문자열 출력.
기본 구조
$ awk options awk_script file |
옵션은 아래와 같은 값을 가질 수 있다.
-F fs 분리기호 지정.
-f file awk 스크립트 지정.
-v var=value 변수 선언.
Read AWK Scripts
aws 스크립트는 ''(single quatation marks)로 둘러싸인 {} (braces)를 사용하여 표현한다.
$ awk '{print "Welcome to awk command tutorial "}' |
위의 명령은 ""(double quatation marks)에 있는 문장을 출력해준다.
Using Variables
awk는 몇몇 변수에 대하여 지정된 필드가 존재한다.
- $0 는 전체 줄.
- $1 첫번째 필드.
- $2 두번째 필드.
- $n n번째 필드
기본적으로 스페이스나 탭과 같은 whitespace 문자가 분리기호로 이용되어 필드를 나눈다.
#myfile 내용 This is the first line. This is the second line. This is the third line. This is the last line. |
$ awk '{print $1}' myfile |
위의 예시는 myfile 내용과 awk 명령어로 구성되어있는데, 명령어를 사용할 경우 결과는 자동적으로 모든 라인은 whitespace 문자들로 필드로 분리되고 각 라인마다 첫 번째 필드인 This가 출력된다.
Using Multiple Commands
sed로 여러 명령을 사용하고 싶을 경우, ;(semicolon)을 이용하면 된다.
$ echo "Hello Tom" | awk '{$2="Adam"; print $0}' |
위의 명령어는 $2가 뜻하는 두 번째 필드가 "Adam"으로 변경되고 이후 다음 명령이 전체 라인($0)을 출력하는 것이므로 "Hello Adam"이 출력된다.
Reading The Script From a File
{print $1 " home at " $6} |
$ awk -F: -f testfile /etc/passwd |
**형식화된 여러 압축파일 풀기 예시
#!/bin/bash
echo "tar result" > ./tar_result.txt
echo "tar error" > ./tar_error.txt
IFS=$'\n'
for line in $(ls -1a *.tar.gz)
do
SID=$(echo $line | awk -F'_' '{ print $5 }')
echo $line >> ./tar_result.txt
mkdir ./../submit_dir/${SID}_assign2
tar -xvzf $line -C ./../submit_dir/${SID}_assign2 >> ./tar_result.txt 2>> ./tar_error.txt
done
#!/bin/bash
echo "tar result" > ./tar_result.txt
echo "tar error" > ./tar_error.txt
IFS=$'\n'
for line in $(ls -1a *.tar.gz)
do
SID=$(echo $line | awk -F'_' '{ print $5 }')
echo $line >> ./tar_result.txt
mkdir ./../submit_dir/${SID}_assign2
tar -xvzf $line -C ./../submit_dir/${SID}_assign2 >> ./tar_result.txt 2>> ./tar_error.txt
done
'공부 > 코딩 개념정리' 카테고리의 다른 글
[Python] csv 파일 처리의 모든 것 (0) | 2021.05.01 |
---|---|
[C++] 1차원, 2차원 벡터 초기화 (1D 2D vector initialization) (0) | 2021.03.17 |
[프로그래밍] 메모이제이션 이해하기 (0) | 2021.01.01 |
[shell programming] sed linux 명령어 이해하기 (0) | 2020.12.29 |
[C++] 함수에 vector 전달하기 (0) | 2020.04.08 |
댓글