나는 명령을 사용한다
varioutput=$(awk '{print $j}' OFS=, data/damper.test_temp1.csv)
,로 구분된 행의 여러 값 중 j번째 값을 추출하고 싶기 때문입니다. 하지만 $varioutput을 사용하고 싶을 때 항상 전체 라인을 제공합니다.
내가 뭘 잘못했나요?
사실 제가 사용하고 싶은 건
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, -v jj="$j" '{print $jj}' data/damper.test_temp1.csv)
done
그럼 이제 위와 같이 사용해야 할지 헷갈리는데요? 오류가 발생하지만 이렇게 사용하면
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, '{print $j}' data/damper.test_temp1.csv)
done
나는 아직도 그 말을 이해합니다.
이제 해결책은 다음과 같습니다
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, -v k=$j '{print $k}' data/damper.test_temp1.csv)
done
답변1
입력 필드 구분자가 아닌 출력 필드 구분자를 지정했습니다. 대신 다음을 사용하십시오.
varioutput=$(awk -F, '{print $j}' data/damper.test_temp1.csv)
(또는 FS
대신 설정 OFS
).
j
또한 위의 내용은 자리 표시자이고 이를 적절한 값(예: )으로 정적으로 대체한다고 가정합니다 print $4
.
스크립트에서 다른 변수를 사용하려면 해당 변수를 전달해야 합니다.awk
예를 들어, RANK
쉘 변수 의 경우
varioutput=$(awk -F, -v j=$RANK '{print $j}' data/damper.test_temp1.csv)
일반적으로 이 예와 같이 소규모 스크립트 세트에 AWK를 사용하기 시작하면 더 많은 스크립트에 AWK를 사용하는 것이 좋습니다.