Replace Awk替换文本文件的头
我需要修复文本文件的标题 格式:Replace Awk替换文本文件的头,replace,awk,Replace,Awk,我需要修复文本文件的标题 格式: Key firstRowColumn1 lastRowColumn1 1 Data 2 Data 3 Data 4 Data 基本上,标题必须有第一个和最后一个索引,它位于实际数据的第一列。我有一组文件如下所示: Key 0 0 1 Data 2 Data 3 Data 4 Data 如何使用awk将它们修复为如下所示 Key 1 4 1 Data 2 Data 3 Data 4 Data 例如,您可以使用: $ awk 'NR==2 &&
Key firstRowColumn1 lastRowColumn1
1 Data
2 Data
3 Data
4 Data
基本上,标题必须有第一个和最后一个索引,它位于实际数据的第一列。我有一组文件如下所示:
Key 0 0
1 Data
2 Data
3 Data
4 Data
如何使用awk将它们修复为如下所示
Key 1 4
1 Data
2 Data
3 Data
4 Data
例如,您可以使用:
$ awk 'NR==2 && FNR==2 {first=$1} NR>2 && FNR==1 {print "Key", first, prev; f=1; next} f{print} {prev=$1}' file file
Key 1 4
1 Data
2 Data
3 Data
4 Data
解释
它在文件中循环两次。第一次获取数据,然后打印数据
在第一个循环中,获取第二行第一个字段的值。这是“第一个”值NR==2&&FNR==2{first=$1}
如果我们是第二次读取文件,请使用收集到的信息打印标题。将标志NR>2&&FNR==1{print“Key”,first,prev;f=1;next}
设置为true,以便从现在开始打印行。跳过记录,以便不打印当前行f
如果设置了标志f{print}
,则打印该行。这将在文件的第二次读取期间完成f
存储第一个字段的值,用于下一行获取“end”值{prev=$1}
awk '...' file file > new_file && mv new_file file
试试这个:
echo "Key $(sed -n '2s/^\([^ ]\+\) .*/\1/p' yourfile) $(tac yourfile | sed -n '1s/^\([^ ]\+\) .*/\1/p')" && sed -n '2,$p' yourfile
嗯,不管出于什么原因,该命令似乎正在执行,但它不会为我打印任何内容。@csnate奇怪。。。什么都没有?例如,如果您使用
{first=$1;print first}
而不是仅使用{first=$1}
,该怎么办。它能打印任何东西吗?它能完美地找到第一个和最后一个索引。它只是没有打印更新的文件。@csnate它看起来好像f{print}
没有运行。也许您可以将其替换为{if(f==1)print}
。遗憾的是没有更改。