Список поддерживаемых скоростей:
dmidecode | awk '/^\t[^\t]/ { speeds = 0 }; /^\tSupported Speeds:/ { speeds = 1 } /^\t\t/ && speeds'
Это работает путем сопоставления строк следующим образом:
На основе одной из возможных интерпретаций ваших требований и использования любого awk в любой оболочке на каждой машине Unix:
$ cat tst.awk
BEGIN { FS=OFS="\t" }
{
grp = ""
for ( i=1; i<=NF; i++ ) {
if ( $i in val2grp) {
grp = val2grp[$i]
break
}
}
if ( grp == "" ) {
grp = ++grps
}
for ( i=1; i<=NF; i++ ) {
if ( !($i in val2grp) ) {
val2grp[$i] = grp
}
}
printf "%s%sgroup%02d\n", $0, OFS, grp
}
$ awk -f tst.awk pairs.tsv
a b group01
c d group02
e f group03
e g group03
h i group04
h j group04
k l group05
f g group03
m n group06
i j group04
Примите во внимание этот ввод:
$ cat pairs2.tsv
a b
c b
d c
Является ли следующий ожидаемым результатом или нет:
$ awk -f tst.awk pairs2.tsv
a b group01
c b group01
d c group01
Если нет, то почему? В строке 1 b
назначается group01
, затем b
также присутствует в строке 2, так что это также должно быть group01
, что означает, что c
находится в group01
, затем в строке 3 c
уже находится в group01
из строки 2, поэтому вся строка 3 (, а такжеd
)затем связаны с group01
.