假设我有一个看起来像这样的文件:
X NeedThis1 KEYWORD
.
.
NeedThis2 X KEYWORD
我需要将这两行合并为一行:
NeedThis2 NeedThis1 KEYWORD
需要对该文件中包含相同KEYWORD的每一行进行操作,但它不能组合两条看起来像这样的行(两个X位于第一个|第二个位置)
X NeedThis1 KEYWORD
X NeedThis2 KEYWORD
我正在考虑自己bash-noob所以如果可以用awk或sed之类的东西做任何建议将不胜感激。
答案 0 :(得分:1)
试试这个:
awk '
$1=="X" {key = $NF; value = $2; next}
$2=="X" && $NF==key {print value, $1, key}' file
<强>解释强>
答案 1 :(得分:1)
awk '
{if ($1 == "X") end[$3] = $2; else start[$3] = $1}
END {for (kw in start) if (kw in end) print start[kw], end[kw], kw}
' file
答案 2 :(得分:0)
我不会给你完整的答案,但如果你有办法识别“KEYWORD”(不在你的问题陈述中),那么使用BASH关联数组:
declare -A keys
while IFS= read -u3 -r line
do
set -- $line
eval keyword=\$$#
keys[$keyword]+=${line%$keyword}
done
你肯定要做些更多的小事,但你的问题陈述是不完整的,有些工作需要为读者练习。