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