unix skip-header bash函数

时间:2012-02-14 17:30:06

标签: bash

在stackoverflow的某个地方,我得到了一个名为“body”的bash函数,它将回显文件的标题(第一行),并将正文(其余行)传递给stdout。这对我来说非常有用,可以处理带有标题的文件。

示例:

FILE.CSV:

field1,field2
a,2
b,1

命令:

$ sort -k2,2 -nr file.csv -t,
a,2
b,1
field1,field2

$ cat file.csv | body sort -nr -t, -k2,2
field1,field2
a,2
b,1

不是一个很好的例子,但它显示了标题保持最佳状态。

谷歌搜索和搜索stackoverflow的分钟没有透露任何内容。

任何人都可以找到或重建这样的功能吗?

3 个答案:

答案 0 :(得分:6)

这是一种允许你抓住标题的方法......然后获取csv文件的其余部分,并排序(或者你想对数据做什么),这一切都会保存到outpipe

head -1 file.csv > outpipe | tail -n+2 file.csv | sort >> outpipe

修改

如果这种方法对您不起作用,您可以尝试使用this previous discussion中的答案。

答案 1 :(得分:2)

基础只是从文件重构out.file:

(head -n1 file; tail -n+2 file) > out.file

你会在第二部分以某种方式运作:

(head -n1 file; tail -n+2 file | voodoo -zack -peng) > out.file

答案 2 :(得分:2)

@summea找到了我正在寻找的答案:来自here的Bash的身体功能:

# print the header (the first line of input)
# and then run the specified command on the body (the rest of the input)
# use it in a pipeline, e.g. ps | body grep somepattern
body() {
    IFS= read -r header
    printf '%s\n' "$header"
    "$@"
}