我想用“文件 2”中匹配的用户名替换“文件 1”中每行的最后一个数字,以获取发布的结果。
文件 1:
28/02/13 46.149002259
22/03/13 68.234001404
14/03/16 69.83500766
29/01/14 87.083008540
14/03/16 106.516006874
14/03/16 201.552002260
03/12/12 207.521011278
18/08/16 234.7780151002
文件2:
用户5874
用户2404
用户81002
用户4540
用户1259
用户6260
用户7278
用户366
这只是“文件 2”的一部分。该文件实际上包含更多的用户。
结果:
28/02/13 46.149002 用户 1
22/03/13 68.234001 用户 2
14/03/16 69.835007 用户 3
29/01/14 87.083008 用户 4
14/03/16 106.516006 用户 5
14/03/16 201.552002 用户 6 03/12/12 207.521011
用户 7
18/08/16 234.778015 用户 8
答案1
我假设您的文件具有这种严格的格式,其中空格仅分隔列(任何用户名内都没有空格等)。那么这应该可以工作(至少在 Linux 上,我的测试平台是 Kubuntu):
while read date value number ; do printf "%s %s %s\n" "$date" "$value" "$(grep " $number" file2 | head -n 1 | cut -f 1 -d " ")" ; done <file1
一些解释:
- 命令从
file1
(… <file1
)读取。 - 只要它能读取一行(
while read …
)... - … 它将其打印出来(
printf …
),并将第三个字段替换为… $( … )
…的 效果…file2
… 在(内搜索包含给定数字的行grep …
,注意前导空格:)" $number"
…- … 仅取第一个匹配项(
head …
,以防万一),… - ... 然后就只剩下第一列了 (
cut …
)。