피복재

피복재

.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를 찾고, 둘 다 동일한 레코드에서 발견된 경우에만 레코드가 인쇄됩니다.

관련 정보