GNU datamash
の使用 :
$ grep -n -x -F -f fileA.txt fileB.txt | datamash -s -t : -g 2 collapse 1
Germany:4,9
UK:5,6
USA:1,2,11
これは最初に grep
を使用します fileB.txt
から行を取得する fileA.txt
の行と完全に一致します 、一致する行番号と行自体を出力します。
-x
を使用しています および -F
質問で使用されているオプションに加えて。 fileA.txt
からのパターンを読み取らないようにするためにこれを行います 正規表現 (-F
)、および部分文字列ではなく完全な行に一致する (-x
).
datamash
ユーティリティは、これを :
の行として解析しています で区切られたフィールド (-t :
)、ソート (-s
) 2 番目のフィールド (-g 2
);国) と最初のフィールド (collapse 1
を折りたたむ);行番号) を各国のリストに追加します。
tr ':,' '\t\t'
を使用して、明らかにコロンとコンマをタブに置き換えることができます 、または同様の方法でスペースを使用します。
$ grep -n -x -f fileA.txt -F fileB.txt | datamash -s -t : -g 2 collapse 1 | tr ':,' '\t\t'
Germany 4 9
UK 5 6
USA 1 2 11
awk
を使用 :
awk 'NR==FNR { country[$0]= country[$0]? country[$0] FS NR: NR; next }
($0 in country){ print $0, country[$0] }' fileB fileA
または「カウント:0」と報告するには " fileA にある countryName が fileB にない場合は、次のようにします:
awk 'NR==FNR { country[$0]= country[$0]? country[$0] FS NR: NR; next }
($0 in country){ print $0, country[$0]; next } { print $0, "0" }' fileB fileA
grep コマンドの出力を Miller (https://github.com/johnkerl/miller) と結合して実行することができます
grep -nf fileA.txt fileB.txt | \
mlr --c2n --ifs ":" --implicit-csv-header --headerless-csv-output reorder -f 2 then \
nest --implode --values --across-records --nested-fs " " -f 1
Germany 4 9
USA 1 2 11
UK 5 6
Linux ディストリビューションが安定しているとはどういう意味ですか? また、一般ユーザーにとってそれはどの程度重要なのでしょうか?
一方向のみで ICMP テスト (ping) を実行するためのユーティリティはありますか?