我有file1.txt和file2.txt,结构如下
中
5511913332222
5511910000023
5511910000029
5511910000034
File2.txt
5511910000029|BLOCKED|7|30/07/2021 02:19:43
5511910000034|AVAIL|7|30/07/2021 03:11:53
5511910000048|AVAIL|7|30/07/2021 04:10:25
5511910000073|BLOCKED|7|30/07/2021 07:20:33
我想写一个file3.txt文件,文件2的第一列和第二列,其中第一列与文件1.txt的第一列相匹配。
File3.txt
5511910000029|BLOCKED
5511910000034|AVAIL
我已经尝试了一些技巧awk,但我不能得到预期的结果。有人能帮帮我吗?
awk的NR = = FNR{一个[0]}NR> FNR和,0美元{打印}’file1 file2祝辞file3
$ awk -F'|' -v OFS='|' 'NR==FNR {a[$1];next} ($1 && $1 in a){print $1,$2}' File1.txt File2.txt
5511910000034|AVAIL
将输出保存到File3.txt... {print $1,$2 > "File3.txt"} ...
$ join -o 2.1,2.2 -t '|' -j 1 <(sort -k1 -t '|' file1.txt) <(sort -k1 -t '|' file2.txt)
5511910000029|BLOCKED
5511910000034|AVAIL
这意味着join
在两个文件(-j 1
)的第一个字段上,输出(-o
)第二个文件(2.
)的第一个和第二个字段(.1
,.2
),使用bar作为字段分隔符(-t '|'
),并在第一个字段(-k1
)上排序输入(<(sort)
),使用bar作为分隔符(' -t '|'再次)。
假设file1.txt
和file2.txt
(1)还没有排序;2)可排序;3)不要像问题中那样每隔一行空白。
由于file1中的行仅由数字组成,因此可以在将它们设置为a
$0 ~ /^[[:digit:]]+$/
进行验证。将输出字段分隔符设置为|
,并将file2的字段分隔符设置为|
awk -v OFS="|" '
NR==FNR && $0 ~ /^[[:digit:]]+$/ {
a[$0]
next
}
($1 in a){
print $1,$2
}
' file1 FS="|" file2 > file3
file3:
5511910000029|BLOCKED
5511910000034|AVAIL