Bash排序并跳过标题。

时间:2012-06-29 07:12:42

标签: bash sorting

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

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

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

感谢。

5 个答案:

答案 0 :(得分:3)

cat YOURFILE| (read -r; printf "%s\n" "$REPLY"; sort)

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这可能适合你(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*

答案 4 :(得分:0)

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