4

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

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

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

谢谢。

4

5 回答 5

7
cat YOURFILE| (read -r; printf "%s\n" "$REPLY"; sort)
于 2014-03-26T21:58:51.990 回答
3

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

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
于 2012-06-29T07:17:25.300 回答
0

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

for i in file* 
do
  sed 1d ${i} | sort -k 1,1 -k 3,3n -t\; > h${i}
  rm ${i}
done
于 2012-06-29T07:17:27.660 回答
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*
于 2012-07-01T06:22:49.357 回答
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
于 2013-03-07T12:17:55.963 回答