.csv 파일의 서로 다른 두 열에서 두 문자열을 검색하고 두 문자열이 모두 같은 행에 있는 경우에만 출력을 인쇄하는 방법입니다.
두 문자열 값 모두 두 개의 변수에 저장됩니다.
.csv 파일의 두 번째 열에서 첫 번째 문자열을 검색하고 네 번째 열에서 두 번째 문자열을 검색하고 동일한 행의 두 문자열 모두에 대해 일치하는 항목이 발견된 경우에만 출력을 인쇄합니다.
아래 명령을 사용하여 행에서 일치하는 문자열을 검색하려고 하는데, 서로 다른 두 열의 두 문자열을 어떻게 일치시키나요?
awk -v pat="$list" -F":" '$0 ~ pat { print $1, $2, $3, $4 }' filename.csv
답변1
사용 awk
:
awk -v pat1="$var1" -v pat2="$var2" -F, '($2==pat1&&$4==pat2)' infile.txt
답변2
당신을 사용하면 GNU sed
주어진 작업을 수행할 수 있습니다.
# bash function to properly escape the variable contents
# s.t. it can be used on the LHS of a sed s/// command
escVar() {
printf '%s\n' "$1" | sed -e 's:[][^\./$*]:\\&:g'
}
# now define your patterns to be used
pat1=$(escVar "$DC")
pat2=$(escVar "$CountryCpde")
# main...
sed -Ee '
h;s/[^,]+/\n&\n/2; s/[^,]+/\n&\n/4'"
/\n.*$pat1.*\n.*\n.*$pat2.*\n/"'!d;g
' filename.csv
또는 Perl
다음 명령을 사용하여 이 작업을 수행할 수 있습니다.
perl -F, -slane '
BEGIN{ @h{qw/1 3/} = (*pat1, *pat2); }
print if 2 == grep { 1 + index $F[$_], ${$h{$_}} } qw/1 3/;
' -- -pat1="$DC" -pat2="$CountryCode" -- filename.csv
피복재
- 필드 구분 기호를 쉼표로 설정하고 자동 파일 읽기(
-n
) 를 활성화하여-s
명령줄에서 변수를 선언합니다. - typeglobs *pat1, *pat2 값으로 해시를 설정합니다.
- 그런 다음 두 번째 필드 $F[1]에서 pat1을 찾고 네 번째 필드 $F[3]에서 pat2를 찾고, 둘 다 동일한 레코드에서 발견된 경우에만 레코드가 인쇄됩니다.