为了说明我的问题,这是一个简单的例子:
cat file1.txt
user1
user2
user3
user4
Run Code Online (Sandbox Code Playgroud)
cat file2.txt
user1 0
user2 3
user3 8
user6 9
Run Code Online (Sandbox Code Playgroud)
awk 'NR==FNR { a[$1]=$2; next } { print $1, a[$1] ? a[$1] : "NA" }' file2.txt file1.txt
user1 NA
user2 3
user3 8
user4 NA
Run Code Online (Sandbox Code Playgroud)
我需要0在user1之后打印,但它打印NA好像user1没有退出file2.txt
我确信有一个简单的解决方案,但为什么会这样呢?
PS.我知道grep -f这里的解决方案,但我只是想知道我在数组中做错了什么.
零被视为假,因此对于a[$1]零值,您将始终获得"NA" .您需要简单地更改测试条件a[$1](如果它为零则为false),如果它不在数组中则仅为false.这应该工作:
print $1, ($1 in a ? a[$1] : "NA")
Run Code Online (Sandbox Code Playgroud)
如果完全没有从数组中删除密钥,那将只打印"NA".
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |