在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的分钟没有透露任何内容。
任何人都可以找到或重建这样的功能吗?
答案 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"
"$@"
}