문자열에서 행의 열에 액세스하는 방법은 무엇입니까?

문자열에서 행의 열에 액세스하는 방법은 무엇입니까?

반복하고 있는 파일이 있습니다 for. 나는 다음과 같은 것을하고 싶다 ...

for line in file.out; do echo "Some text before $line($2) $line($3)"; done

여기서 각 행에 대해 해당 행의 두 번째 및 세 번째 열을 현재 문자열에 삽입합니다. 이를 수행하는 쉬운 방법이 있습니까? 문자열에서 awk에 액세스할 수 있나요?

입력 예:

some.metric.tag_A 100500 1446043920
some.metric.tag_B 100501 1446043921
some.metric.tag_C 100502 1446043922
some.metric.tag_D 100503 1446043923

예제 출력:

Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923

답변1

awk를 사용하세요

awk는 라인을 암시적으로 반복하고 각 라인을 필드로 분리합니다.

$ awk '{printf "Some text before %s %s\n",$2,$3}' file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923

입력 파일에 항상 3개의 열만 있다는 것을 알고 있다면 이 명령을 다음과 같이 단축할 수 있습니다. (팁: Don Crissti)

$ awk '{$1="Some text before"} 1' file.out

쉘을 사용하다

쉘 문을 사용하여 행을 read필드로 나눌 수 있습니다.

$ while read a b c d; do echo "Some text before $b $c" ; done <file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923

관련 정보