cat file1
xizaoshuijiao @E0488_5@
chifandaqiu @E0488_3@
gongzuoyouxi @E0977_5@
cat file2
@E0488_3@ @E0488_3@
@E0488_5@ @E0488_5@
@E0977_3@ @E0977_3@
@E0977_5@ @E0977_5@
@E0977_6@ @E0977_6@
目的:如果在file2 $ 1中找到file1中的$ NF,则将file1中的$ NF替换为file2 $ 2.thewise,不做任何更改。
我的代码:
awk '\
NR==FNR{a[$1]=$1;b[$2]=$2;next}\
{if($NF in a)\
{$NF=b[FNR];print $0}\
else if!($NF in a)\
{print $0}\
}' file2 file1
然后出现错误:
awk: cmd. line:5: else if!($NF in a)\
awk: cmd. line:5: ^ syntax error
awk: cmd. line:6: {print $0}\
awk: cmd. line:6: ^ syntax error
所以似乎"!"问题。因为我想要打印file1中的所有内容(更改行和未更改的行)。我该怎么办?
答案 0 :(得分:3)
你可以用这种形式重写它
awk 'NR==FNR {a[$1]=$2; next}
$NF in a {$2=a[$1]}1' file2 file1
因为你的file2具有相同的$ 1和$ 2的值,所以它似乎毫无用处。
由于您想无条件打印,请不要在条件块中打印。此处1
对应{print}
,与{print $0}
答案 1 :(得分:2)
替换:
if!($NF in a)
使用:
if(!($NF in a))
!
是测试条件的一部分,awk期望测试条件全部都在parens内。
答案 2 :(得分:0)
验证后我的代码出现了。
awk '\
NR==FNR{a[$1]=$1;b[$2]=$2;next}\
{if($NF in a)\
{$NF=b[FNR];print $0}\
else # use else... it will work, no need else if... , but why ? How can I achieve it with else if !($NF in a)
{print $0}\
}' file2 file1