Awk命令左/右外部连接2个文件



File1包含2行:

/home/asingh549/cleanup,8  
/home/vbhat94/test_bkup,8

文件2包含3行:

/home/asingh549/cleanup,7  
/home/vbhat94/test_bkup,7  
/home/asingh699/sample/adam,1

预期输出:

/home/asingh549/cleanup,8  
/home/vbhat94/test_bkup,8  
/home/asingh699/sample/adam,1

我试过了-

awk -F, 'NR==FNR{a[$1]=$2; next} {print $1 FS a[$1] }' File1 File2

但我的输出低于

/home/asingh549/cleanup,8  
/home/vbhat94/test_bkup,8 
/home/asingh699/sample/adam,

输出的第三行逗号后缺少数字1
有人能建议我如何获得所需的输出吗?

您可以使用以下awk解决方案:

awk '
BEGIN {FS=OFS=","}
FNR == NR {
map[$1] = $2
next
}
$1 in map {
$2 = map[$1]
}
1' file1 file2
/home/asingh549/cleanup,8
/home/vbhat94/test_bkup,8
/home/asingh699/sample/adam,1

您的代码可能会被编辑以获得所需的输出,如下

awk -F, 'NR==FNR{a[$1]=$2; next} {print $1 FS (($1 in a)?a[$1]:$2) }' File1 File2

然后输出更改到

/home/asingh549/cleanup,8
/home/vbhat94/test_bkup,8
/home/asingh699/sample/adam,1

说明:我使用了所谓的三元运算符条件?valueiftrue:值iffalse,检查$1 in a就是检查数组a是否有给定的键。

(在gawk 4.2.1中测试(

如果这是错误的答案,我提前道歉,但是。。。

cat file1 > file3
sed -n '3p' file2 >> file3

如果你需要知道如何在未来使用可变行号,那么你可以使用"$p"来始终打印文件的最后一行,即使你不知道它的"编号"是什么。

{m,g}awk -F, 'NR==FNR ? _*(___[$!_]=$_) : 
$!NF = _<(__=___[$!_]) ? __ : $_' f1.txt f2.txt

最新更新