从文件夹中的所有文件中查找数据

从文件夹中的所有文件中查找数据

我有一个文件夹,其中包含管道(|)分隔的数据。我想要文件夹中每个文件第一行的第 8 列列表以及文件名,如果所有这些数据都可以合并在一个文件中,那就太好了

答案1

为了传递文件,awk我们可以使用 shell globstar。-F可以用来定义字段分隔符,这-F'|'就是我们所需要的。就只获得第一行而言,使用nextfile就足够了。因此,我们可以这样做:

awk -F'|' '{print FILENAME,$8;nextfile}' ./*

从文件所在的文件夹中。

应该注意的是,nextfile可能不支持。例如,正如 Stephane 所指出的,Debian 及其衍生版本附带了旧版本的mawk,它没有nextfile选项。如果您需要更多可移植的 awk 代码,则可以利用FNR变量。例如:

awk -F'|' 'FNR==1{print FILENAME,$8}'  ./*

答案2

虽然我还是更喜欢awk方法(更清晰,更像 shell,更高效),这是使用 shell 循环效果相对较好的一种情况:

for file in *; do
  IFS='|' read -r x x x x x x x text x < "$file" || continue
  printf '%s\n' "$file: $text" || exit
done

答案3

find . ! -name . -prune -exec test -f {} \; -exec sh -c '
   printf "%s:%s\n" "$1" "$(head -q -n 1 "$1" | cut -d\| -f8)"
' {} {} \;

相关内容