【问题标题】:To print GunZip FileName /PathName and Selected Rows :要打印 GunZip FileName /PathName 和 Selected Rows :
【发布时间】:2014-10-08 05:50:27
【问题描述】:

希望打印位于目录/子目录中的所有文件的前 2 行以及文件名和路径名。 都是*.gz 扩展文件。该目录/子目录中有大约 10000 个文件,并且有多个子目录。

例如:

Dir:home/Test

sample_Test.csv.gz

10,Jan,100
30,Jan,300
50,Jan,500

目录:home/Test/Feb

sample_feb.csv.gz

10,Feb,200
20,Feb,400
40,Feb,800
60,Feb,1200

目录:home/Test/Mar/Data

sample_mar.csv.gz

10,Mar,200
20,Mar,400
40,Mar,800
60,Mar,1200

预期输出:

Filename:sample_jan.csv.gz , PathName: home/Test
10,Jan,100
30,Jan,300

Filename:sample_feb.csv.gz , PathName: home/Test/Feb
10,Feb,200
20,Feb,400

Filename:sample_mar.csv.gz , PathName: home/Test/Mar/Data
10,Mar,200
20,Mar,400

已尝试以下命令和部分。

for file in *.gz; do echo "Filename: $file"; zcat "$file" | head -2 ; done

希望在“home”目录中运行该命令,该命令将搜索当前目录和子目录下的文件。 寻求您的建议!!!

【问题讨论】:

  • 那么你现在的命令有什么问题?
  • 这个命令只搜索当前目录下的文件,也想知道如何打印Pathname。
  • 没问题@AVN,很高兴它成功了。

标签: unix awk


【解决方案1】:

如果您使用find 扩展您的for 循环:

for FILE in `find home -type f -name *.gz`; do
  echo "Filename: `basename $FILE` , PathName: `dirname $FILE`"
  zcat $FILE | head -2
done

type f 仅查找文件。

basename 去掉目录和后缀,留下文件名。

dirname 从文件名中去除非目录后缀,留下目录路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2013-10-04
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多