如何从file1到file2查询的匹配结果中写入具有不同列的file3 ?



我有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.txtfile2.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

相关内容

  • 没有找到相关文章

最新更新