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