다음과 같은 데이터 파일이 있습니다.
file1:
c1.212 3.4 90
c1.011 4.4 33
c2.09432 7.7 76
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c4.1211001 1.2 11
c4.1111222 1.2 10
c4.0000011 99 76
c5.123 11 01
c5.113 11 01
...
두 번째 파일은 다음과 같습니다.
c1.212
c3.2223
c3.0911
c5.113
...
첫 번째 열의 정보를 기반으로 한 파일 1에서 볼 수 있듯이 5 개의 그룹 (c1, c2, c3, c4 및 c5)이 있고 각 그룹에는 서로 다른 수의 하위 집합이 있습니다 (예 : c1에는 2 개의 하위 집합이 있지만 c2에는 하나의 하위 집합이 있음) 하지만 두 번째 파일에는 3 개의 그룹 (c1, c3 및 c5)이 있습니다. 내가 원하는 것은 file2에서 관찰되는 그룹이 모든 하위 집합이있는 파일 1에 남아 있고 해당 그룹이 파일 2 (c1 및 c4)에서 관찰되지 않는 경우 모든 하위 집합과 함께 file1에서 제거되는 것입니다. 따라서 출력은 다음과 같아야합니다.
output:
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
...
어떤 제안이라도 주시면 감사하겠습니다. (실제 파일에는 45,000 개 이상의 행이 있습니다)
좋은 awk
스테이플이 있습니다.
awk -F. 'NR==FNR {a[$1]++; next} $1 in a' file2 file1
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
또는 그룹 식별자 (가정 c1
, c2
파일에 다른 곳에서는 나타나지 않는 등), 당신은 사용할 수있는 cut
다음 식별자를 추출하고, grep
첫 번째 파일의 예에서 그들을 일치
$ cut -d. -f1 file2 | grep -Fwf- file1
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다