반복하고 있는 파일이 있습니다 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