私のフォルダには.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