Bash 排序并跳过标题



>我有一个脚本来对 for 循环中的某些列进行排序。我想在排序过程中跳过标题,但我失败了。这是我所拥有的:

for i in file* 
do
  sort -k 1,1 -k 3,3n -t; ${i} > h${i}
  rm ${i}
done

如何在排序过程中跳过标题,但将其保留在输出中?

谢谢。

cat YOURFILE| (read -r; printf "%sn" "$REPLY"; sort)

标题是文件的第一行吗?如果是,请尝试下一个:

for i in file* 
do
  head -1 ${i} > h${i}
  sed 1d ${i} | sort -k 1,1 -k 3,3n -t; >> h${i}
  rm ${i}
done

您可以在使用 sed 排序之前删除标头。 未经测试的代码。

for i in file* 
do
  sed 1d ${i} | sort -k 1,1 -k 3,3n -t; > h${i}
  rm ${i}
done
这可能

对你有用(GNU sed 和 Bash):

sed -i '1{h;d};:a;$!{N;ba};s/.*/cat <<\EOF|sort -k1,1 -k3,3n -t\;n&nEOF/e;H;g' file*
for i in file* 
do
    awk 'NR==1;NR>1{print|"sort  -k 1,1 -k 3,3n -t;"}' ${i} > $h{i} 
    rm ${i}
done
$ netstat -nt | (sed -u 2q; sort -k4,4V)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:22            127.0.0.1:54088         ESTABLISHED
tcp        0      0 127.0.0.1:22            127.0.0.1:54096         ESTABLISHED
tcp        0      0 127.0.0.1:900           172.17.0.4:39452        TIME_WAIT
tcp        0      0 127.0.0.1:900           172.17.0.4:39468        TIME_WAIT

最新更新