我想用“文件 2”中匹配的用戶名替換“文件 1”中每行的最後一個數字,以獲得發布的結果。
文件1:
2013年2月28日 46.149002第259章
2013年3月22日 68.234001404
2016 年 3 月 14 日 69.83500766
29/01/14 87.083008540
2016 年 3 月 14 日 106.516006第874章
2016年3月14日 201.552002260
2012年3月12日 207.521011278
2016年8月18日 234.7780151002
文件2:
用戶5第874章
用戶2404
用戶81002
用戶4540
用戶1第259章
用戶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 14106416410652105/10651 使用者 / 1.552 002 用戶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 …
)。
- ... 搜尋 ( 內包含給定數字的行