Bash
如何使用 awk/sed 命令連接兩個文件中的列?
我有兩個文件 File-1 和 File-2,列中有數據。我想創建另一個文件並將與數據相對應的 File-2 的第一列的數據按行複製到 file-1,如下所示。
文件-1
A P B Q C R
文件-2
5.4 9.0 7.4 11.5 9.4 15.7
輸出
A=5.4, B=7.4, C=9.4
我希望我的輸出像上面那樣僅用於第一列數據。
我感謝您的幫助!!
提前致謝!!!
$ paste file1 file2 | awk '{printf "%s%s=%s", sep, $1, $3; sep=", "} END{print ""}' A=5.4, B=7.4, C=9.4
請注意,“連接”(在問題標題中提到)是一種特定操作,其中一個數據集用於從另一個數據集中提取數據(關係連接操作)。這可以通過
join
實用程序(或短awk
命令)來完成。您要做的是數據提取和合併。您在問題文本中對此進行了很好的解釋。
假設你有
bash
shell,每個文件的第一列的內容可以使用 提取cut
,然後使用=
作為分隔符合併paste
:$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) A=5.4 B=7.4 C=9.4
每個
<(...)
(程序替換)都將被替換為一個臨時文件的名稱,替換中的cut
命令輸出將從該文件中可供paste
讀取。然後,您可以將其合併到一個逗號分隔的行中,如下所示:
$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s - A=5.4,B=7.4,C=9.4
如果您需要每個逗號後的空格,
sed
可以使用:$ paste -d '=' <(cut -d ' ' -f 1 File-1) <(cut -d ' ' -f 1 File-2) | paste -d ',' -s - | sed 's/,/, /g' A=5.4, B=7.4, C=9.4
請注意,我假設問題中的空行實際上不是數據文件的一部分。您可能希望使用 預處理數據
sed '/^[[:blank:]]*$/d'
,這將刪除任何空行或僅包含空格和/或製表符的行。另請參閱
cut
和paste
(man cut
和man paste
) 的手冊。