bash - 获取 n 个最后记录并更改它们的特定列

我有这样的文件

1      2      "45554323"      p      b  
2      2      "34534567"      f      a  
3      3      "76546787"      u      b  
2      4      "56765435"      f      a  
*      a  
0      b  

我想从 END{} 部分的最后两条记录中删除 ab

结果:

1      2      "45554323"      p      b  
2      2      "34534567"      f      a  
3      3      "76546787"      u      b  
2      4      "56765435"      f      a  
*        
0        

如何使用 awk 获取最后 n 行并更改它们的字段?

最佳答案

这是使用任何 awk 的一种方法:

awk -v count=$(wc -l <file.txt) 'NR > count - 2 { $2 = "" }1' file.txt

结果:

1      2      "45554323"      p      b  
2      2      "34534567"      f      a  
3      3      "76546787"      u      b  
2      4      "56765435"      f      a  
* 
0 

或者要对除输入文件最后两行以外的所有记录作为 shell 脚本执行 awk 操作,请尝试 ./script.sh file.txtscript.sh 的内容:

command=$(awk -v count=$(wc -l <"$1") 'NR <= count - 2 { $2 = "" }1' "$1"
echo -e "$command"

结果:

1  "45554323" p b
2  "34534567" f a
3  "76546787" u b
2  "56765435" f a
*      a  
0      b  

https://stackoverflow.com/questions/12882738/

相关文章:

vb.net - VB字典包含值返回键

sql - SQL Server 中的窗口函数

php - 将 PDF 存储在 MySQL 数据库中

php - 如何使用 SimpleXML 解析忽略错误的 XML

asp.net - 如何在 vb.net 中做正则表达式

php - 使用 maxlength 标签通过 PHP 检查表单输入长度

css - 带 float 的无序列表项 :left do not float properly

ruby-on-rails - 是否可以在 Rails 中更改 URL 中的 Controller

c# - 从字符串中删除无法识别的 ASCII 字符

ruby-on-rails - 在 Rails 3 的邮件拦截器中设置 header