다른 파일의 줄 모음을 정렬하는 방법은 무엇입니까?

다른 파일의 줄 모음을 정렬하는 방법은 무엇입니까?

각 파일의 두 번째 행을 두 번째 열로 정렬하고 해당 파일의 이름을 인쇄하고 싶습니다. 나는 이것을하고있다 -

rm tmp;
for filename in file*; do
  num=`head -2 $filename | tail -1 | awk '{print $2}'`;
  echo "$filename $num" >> tmp;
done;
sort -n -k2,2 tmp      

파일을 포함하지 않고 더 나은 방법으로 수행할 수 있습니까 tmp?

답변1

노력하다:

$ awk 'FNR == 2' file1 file2 filen | sort -n -k2,2

을 통해 다음 을 사용하여 효율성을 향상 gawk할 수 있습니다 nextfile.

$ gawk 'FNR == 2 {print FILENAME,$2; nextfile}' file1 file2 filen | sort -n -k2,2

nextfile또는 다른 구현에서 자신만의 함수를 작성할 수도 있습니다 awk.이것.

그것이 없으면 더 이식성을 gawk높일 수 있습니다 perl.

$ perl -anle 'print "$ARGV $F[1]" and close ARGV if $. == 2' file1 file2 filen |
  sort -n -k2,2

답변2

for f in file* ; do { 
    read line
    read na num na
} <"$f"
    printf '%s\t%s\n' "$f" "$num"
done | sort -t\<tab> -n -k2,2

필드 구분 기호가 눈에 띄지 않기 때문에 확실하게 말하기는 어렵지만 awk위의 내용은 기본값을 가정하지만 기본 쉘 스크립트를 사용하면 작업이 수행된다고 생각합니다.

관련 정보