我有一个包含 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