이 명령의 출력에 파일 이름을 어떻게 포함할 수 있나요?

이 명령의 출력에 파일 이름을 어떻게 포함할 수 있나요?

이 명령의 출력에 파일 이름을 어떻게 포함할 수 있나요?

tail -n 1 *.txt |awk -F "|" '{print $2}'

답변1

이를 위해서는 GNU Awk가 필요합니다:

awk -F "|" 'ENDFILE{print $2, FILENAME}' *.txt

추신: 주석으로 설명하는 대신 원하는 출력의 예를 실제로 추가해야 합니다.

답변2

어떠한 경우에도 참고해주세요기준tail인수로 최대 하나의 파일 이름만 지원합니다.

일부는 여러 파일 이름 인수를 허용하지만 출력은 구현에 따라 다르며 사후 처리가 안정적으로 불가능한 경우가 많습니다.

여기에서는 Korn/POSIX와 유사한 셸을 사용하여 다음을 수행할 수 있습니다.

for file in *.txt; do
  tail -n1 < "$file" | {
    IFS='|' read -r ignore value ignore && printf '%s\n' "$file: $value"
  }
done

답변3

펄 사용:

#!/usr/bin/perl

use strict;
use autodie qw(open);

foreach my $f (@ARGV) {

  # Simple implementation of `tail -1`:
  # Seek to somewhere near the end of the file and
  # begin reading lines until we're at eof.  Then
  # extract and print the 2nd field along with the
  # filename.

  my $size = -s $f;
  my $seek = int($size / 20);   # start with 1/20th of file size
  $seek = 500  if $seek < 500;  # min 500 bytes
  $seek = 5000 if $seek > 5000; # max 5000

  open(my $fh,'<',$f);
  seek($fh, -$seek, 2);

  while (<$fh>) {
    if (eof) {
      chomp;
      my @fields = split /\|/;
      printf "%s: %s\n", $f, $fields[1];
    }
  };
  close($fh);
};

예를 들어 다른 이름으로 저장하고 ./tail1-col2.pl실행 가능하게 만들고 chmod +x ./tail1-col2.pl다음과 같이 실행합니다.

./tail1-col2.pl *.txt

관련 정보