일부 매개변수를 수신하고 이러한 매개변수를 기반으로 주어진 csv 파일의 데이터를 필터링하는 awk 스크립트가 있습니다.
2개의 출력이 있습니다:
- 먼저 매개변수와 일치하는 모든 레코드가 포함된 .csv 파일을 작성합니다.
- 그런 다음 레코드 이름을 참조하는 $2 필드만 인쇄합니다. 그러나 이는 20개 레코드의 무작위 하위 집합이어야 합니다.
지금까지 나는 이것을 했습니다:
나는 다음과 같이 스크립트를 호출합니다../Script.awk ARG1=20 ARG2="AAA" ARG3=1900 data.csv
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 }
그래서,필터링된 데이터 파일을 올바르게 생성하고 $2를 인쇄하지만 레코드가 많아서 임의의 하위 집합만 인쇄하고 싶습니다.. 그럼 어떻게 해야 할지 아시나요?
감사해요! !
답변1
#!/usr/bin/env bash
out='filtered_data.csv'
awk -F, '$4 > ARG1 && $8 == ARG2 && $20 > ARG3' "$@" > "$out" &&
cut -d, -f2 "$out" | shuf -n20
그러나 ARG1 등 대신 의미 있는 변수 이름을 선택하십시오.
답변2
편집하다:나는 이것을 Ed Morton의 답변 전에 게시했는데 이는 분명히 더 좋습니다.
다른 사람들에게 도움이 될까봐 여기에 남겨둡니다.
글쎄요, 사실 꽤 간단합니다... 누군가 필요할 경우를 대비해 제가 직접 답변해 드리겠습니다! 작업 스크립트가 예상대로 작동합니다.
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 | "shuf -n20"}
파이프만 있으면 돼"슈프-n20"프린팅이 있어요 :)