我想用awk/sed
处理以下两个文件(A.TXT和b.txt),并得到结果 cat a.txt
如何用awk/sed来处理这两个文件得到的结果,我想
a UK
b Japan
c China
d Korea
e US
而且cat b.txt
导致
c Russia
e Canada
我需要的结果如下:
a UK
b Japan
c Russia
d Korea
e Canada
我想用awk/sed
处理以下两个文件(A.TXT和b.txt),并得到结果 cat a.txt
如何用awk/sed来处理这两个文件得到的结果,我想
a UK
b Japan
c China
d Korea
e US
而且cat b.txt
导致
c Russia
e Canada
我需要的结果如下:
a UK
b Japan
c Russia
d Korea
e Canada
尝试:
awk 'FNR==NR{A[$1]=$NF;next} {printf("%s %s\n",$1,$1 in A?A[$1]:$NF)}' b.txt a.txt
检查这里的条件FNR == NR这将是只有当读取第一个文件(b.txt)TRUE。然后创建一个名为A的数组,其索引为$ 1,并具有值最后一列。然后使用printf打印2个字符串,其中第一个字符串是$ 1,另一个是如果a.txt中的$ 1存在于数组A中,则打印数组A的索引为$ 1的值,否则打印a.tzt本身的最后一列。
编辑:因为OP有马车字符到Input_files所以请删除他们也遵循。
tr -d '\r' <b.txt> temp_b.txt && mv temp_b.txt b.txt
你有正确的想法,但 - 为什么使用名为“A”的数组来表示名为“b”的文件的内容,特别是当其他文件被命名为“a”时,为什么要混淆你的代码?不要将所有大写变量名称用于在线讨论的所有常见原因。为了便于跨awk版本添加三元表达式的加括号(某些awks会在某些情况下会出现语法错误)。为什么在简单打印时使用printf呢?当你的代码依赖于只有2个字段时,为什么使用$ NF而不是$ 2?请参阅https://stackoverflow.com/a/44311894/1745001。 –
有时第一行不会改变,其余的都可以。我不知道为什么,你能给我一些提示 –
请给我们展示一些例子,我们可以帮助更多。 – RavinderSingh13
您可以使用下面的一行:
join -a 1 -a 2 a.txt <(awk '{print $1, "--", $0, "--"}' < b.txt) | sed 's/ --$//' | awk -F ' -- ' '{print $NF}'
我们用awk前缀b.txt每一行的一个键和--
以后给我们一个分割点:
<(awk '{print $1, "--", $0, "--"}' < b.txt)
使用join命令加入公共密钥上的文件。该-a 1
选项告诉命令
join -a 1 -a 2 a.txt <(awk '{print $1, "--", $0, "--"}' < b.txt)
用sed删除--
部分是上线的一些终端:
sed 's/ --$//'
用awk在每行的最后一个项目:
awk -F ' -- ' '{print $NF}'
用awk:
先填充aray/hash a
与完整行($0
)并使用此行中的第一列($1
)作为索引。最后,用循环打印所有数组/散列a
的元素。
awk '{a[$1]=$0} END{for(i in a) print a[i]}' file1 file2
输出:
a UK b Japan c Russia d Korea e Canada
$ awk 'NR==FNR{b[$1]=$2;next} {print $1, ($1 in b ? b[$1] : $2)}' b.txt a.txt
a UK
b Japan
c Russia
d Korea
e Canada
你尝试过什么解决呢? – Sundeep
[编辑]你的问题,并使用'{}'按钮来格式化你的输入,输出和代码。 –
谢谢。我试过用awk来解决这个问题。不过,我是awk的新手。你们能给我一些提示吗?谢谢 –