각 파일의 두 번째 행을 두 번째 열로 정렬하고 해당 파일의 이름을 인쇄하고 싶습니다. 나는 이것을하고있다 -
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
위의 내용은 기본값을 가정하지만 기본 쉘 스크립트를 사용하면 작업이 수행된다고 생각합니다.