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

标签 bash awk

我有这样的文件

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  

关于bash - 获取 n 个最后记录并更改它们的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882738/

相关文章:

linux - 在 shell 中循环多列

awk - 使用单个 sed 调用作为前 H 行的头部和最后 T 行的尾部

regex - 对特殊字符使用 sed

bash - 在 bash 中,如何将 "set -x"行打印到标准输出而不是标准错误?

linux - Bash shell 仅从 PS 获取 PID 不起作用

linux -/dev/urandom 的配置是什么?验证码?

linux - 在 sed/awk/grep 中将日期从 2012-01-31 更改为 31-01-2012

bash - 将分隔的输出读入多个 Bash 变量

linux - AWK - 从列表中删除最后一项

python - 仅查找一个 csv 中存在的行,而不查找另一个 csv 中存在的行