Linux: 특정 ID의 행을 추출하는 방법과 ID가 다른 파일에 기록되어 있습니까?

Linux: 특정 ID의 행을 추출하는 방법과 ID가 다른 파일에 기록되어 있습니까?

ID가 포함된 CSV 파일이 있습니다.

1
3
8

ID뿐만 아니라 다른 정보도 포함하는 또 다른 정보 파일이 있습니다. ID 정보만 추출하고 싶다면 어떻게 해야 하나요?

1 96 283 4
2 87 918 6
2 49 208 5
3 57 294 0
3 24 284 0
4 28 345 290
5 23 234 209
6 98 245 02
7 18 329 89
8 19 239 78
8 18 289 90
9 28 390 09
9 19 238 09
10 23 899 7

이 파일을 만들고 싶어요

1 96 283 4
3 57 294 0
3 24 284 0
8 19 239 78
8 18 289 90

답변1

나는 다음을 사용할 것이다 awk:

awk 'NR==FNR{a[$0]++;next}a[$1]' file1 file2

귀하의 ID는 file1에 있고 나머지 ID는 file2에 있습니다. 산출:

1 96 283 4
3 57 294 0
3 24 284 0
8 19 239 78
8 18 289 90

답변2

파일이 공백으로 구분되어 있고 Unix 스타일 줄 끝이 있는 경우:

cat file1.txt | xargs -I '{}' -n 1  grep '^{} ' file2.txt

답변3

사용밀러당신은 이것을 할 수 있습니다

mlr --implicit-csv-header --headerless-csv-output --ifs " " --csv join -j 1 -r 1 -f joinInputOne.csv joinInputTwo.csv

얻다

1,96,283,4 3,57,294,0 3,24,284,0 8,19,239,78 8,18,289,90

JoinInputOne.csv 예

1 3 8

그리고

JoinInputTwo.csv는 다음과 같습니다.

1 96 283 4 2 87 918 6 2 49 208 5 3 57 294 0 3 24 284 0 4 28 345 290 5 23 234 209 6 98 245 02 7 18 329 89 8 19 239 78 8 18 289 90 9 28 390 09 9 19 238 09 10 23 899 7

답변4

각 파일의 첫 번째 필드를 동질화할 수 있는 경우(예: 앞에 "0"을 추가하여) Join(1)을 사용할 수 있습니다.

f1:

01
03
08

f2:

01 96 283 4
02 87 918 6
02 49 208 5
03 57 294 0
03 24 284 0
04 28 345 290
05 23 234 209
06 98 245 02
07 18 329 89
08 19 239 78
08 18 289 90
09 28 390 09
09 19 238 09
10 23 899 7

그 다음에:

$ join f f2
01 96 283 4
03 57 294 0
03 24 284 0
08 19 239 78
08 18 289 90

관련 정보