提问人:FondDuLac 提问时间:1/21/2023 最后编辑:FondDuLac 更新时间:1/21/2023 访问量:106
Bash 脚本:如何在对文本或 csv 文件进行排序时跳过标题行,同时将其保留在输出中
Bash script: how to skip a header line when sorting a text or csv file, while retaining it in the output
问:
(改编自:加入手册,标题行)。
我正在对一个名为 file1 的文件进行排序,其中包含以下内容:
Name Age
Charlie 34
Alice 25
如果我只是写:
sort -k2b,2 file1
我得到:
Alice 25
Charlie 34
Name Age
我可以像这样从排序中排除标题:
head -1 file1 ;(sed -n '2,$p' file1|sort -k2b,2)
但是 gnu 手册中的例子是这样的:
( sed -u 1q ; sort -k2b,2 ) < file1
为什么会这样?
我认为我会从命令行中得到这个:
Name Age
Alice 25
Charlie 34
Name Age
sed 消耗了 stdin 的第一行,然后排序消耗了其余的?
答:
0赞
Cole Tierney
1/21/2023
#1
您可以打印标题,然后对其余部分进行排序。
sed -n '1p' file1; sort <(sed '1d' file1)
Name Age
Alice 25
Charlie 34
评论
sed 消耗了 stdin 的第一行,然后排序消耗了其余的?
- 是的,从 stdin 中剥离第一行并转储到 stdout,而 将 stdin 的其余部分馈送,然后转储到 stdoutsed
sort
sed
1q
sort
-u
sed
sed
q
sort
sed
sort
sort
sed
( head -n 1 ; sort -k2b,2 ) < file
也应该工作{ head -n 1 ; sort -k2b,2 ; } < file