複数のgzファイルの複数のパイプシンボルのzgrep

複数のgzファイルの複数のパイプシンボルのzgrep

私のフォルダには.gzファイルがたくさんあります。

/a/b/c1.gz
/a/b/c2.gz
/a/b/c3.gz

など。

一部のファイルにはパイプ区切り文字が1つあり、一部のファイルには2つ、3つ、4つなどがあります。

xyz|abc
xyz|abc|wty
xyz|abc|wty|asd

など。

2つのパイプ区切り記号、3つの区切り記号などを含むすべてのファイルを見つける方法は?

ベストアンサー1

|- 区切られた列の数が特定のファイルで一定であると仮定すると、ファイルの最初の行を調べるだけで、そのファイル内の列の数を判断できます。

以下は、名前付きファイルに対してこれを行いますname.gz

gzip -dc name.gz | awk -F '|' -v name="name.gz" '{ print NF, name } { exit }'

したがって、単純なループを使用すると、列数とファイル名(パターンに一致するすべてのファイル)を出力できます/a/b/c*.gz

for name in /a/b/c*.gz; do
    gzip -dc "$name" |
    awk -F '|' -v name="$name" '{ print NF, name } { exit }'
done

n=3特定の数の列(例:)を持つファイル名のみを出力するには、次のようにします。

n=3
for name in /a/b/c*.gz; do
    gzip -dc "$name" |
    awk -F '|' -v n="$n" -v name="$name" 'NF == n { print name } { exit }'
done

おすすめ記事