gpt4 book ai didi

Bash:我如何查看并保存标准输入的第一行

转载 作者:行者123 更新时间:2023-12-02 21:22:25 25 4
gpt4 key购买 nike

我有一组文件,当它们组合在一起时具有以下格式

NAME1.1 NAME2.1 NAME3.1 KEY1 VALUE1.1 KEY2 VALUE2.1
NAME1.2 NAME2.2 NAME3.2 KEY1 VALUE1.2 KEY2 VALUE2.2
...
NAME1.N NAME2.N NAME3.N KEY1 VALUE1.N KEY2 VALUE2.N

阅读键值对文本很乏味,所以我认为处理脚本是合适的,所以我写了这个

#!/bin/bash
cat "$@" \
| head -n1 \
| awk '{printf("NAME1 NAME2 NAME3 ");for(i=4;i<NF;i+=2){printf("%s ",$i)}printf("\n")}'

cat "$@" \
|awk '{printf("%s %s %s ",$1,$2,$3);for(i=5;i<=NF;i+=2){printf("%s ",$i)}printf("\n")}'

如您所见,我播放文件两次只是为了获取标题行,以便我可以获取值并将其格式化为

NAME1   NAME2   NAME3   KEY1     KEY2
NAME1.1 NAME2.1 NAME3.1 VALUE1.1 VALUE2.1
NAME1.2 NAME2.2 NAME3.2 VALUE1.2 VALUE2.2
...
NAME1.N NAME2.N NAME3.N VALUE1.N VALUE2.N

有没有一种好方法可以查看并复制第一行以便我可以保存它?

我试过这样的单衬

( cat *.all_my_files \
| tee >( head -n1 | awk '{printf("NAME1 NAME2 NAME3 ");for(i=4;i<NF;i+=2){printf("%s ",$i)}printf("\n")}' ) \
| awk '{printf("%s %s %s ",$1,$2,$3);for(i=5;i<=NF;i+=2){printf("%s ",$i)}printf("\n")}' \
) | column -t

但是当任一标准输出完成给我不确定的输出量时,这似乎会退出

最佳答案

似乎您可以一次将所有文件传递给 awk,并对第一条记录执行一些特殊操作:

awk 'NR==1{printf("NAME1 NAME2 NAME3 ");for(i=4;i<NF;i+=2){printf("%s ",$i)}print ""}
{printf("%s %s %s ",$1,$2,$3);for(i=5;i<=NF;i+=2){printf("%s ",$i)}' "$@"

只有当NR==1时才会执行第一个 block ,这仅适用于第一个文件的第一条记录。将对所有记录执行另一个 block ,包括第一个记录。

关于Bash:我如何查看并保存标准输入的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com