Linux 通过shell脚本更改文件内容

Linux 通过shell脚本更改文件内容,linux,bash,shell,Linux,Bash,Shell,我有一个需要更改文件内容的要求,比如file.xyt。该文件包含如下值: 21 100 34 82 122 50 75 12 88 10 15 45 我需要查看每行中的第四个参数(本例中为82、12和45)是否小于23。 如果是这样,我需要删除那一行 对于本例,结果将是: 21 100 34 82 88 10 15 45 如何使用shell脚本实现这一点?提前谢谢 您可以使用awk: awk '$4 >= 23 {print}' file 可以缩短为(感谢@RomanPerekhre

我有一个需要更改文件内容的要求,比如file.xyt。该文件包含如下值:

21 100 34 82
122 50 75 12
88 10 15 45
我需要查看每行中的第四个参数(本例中为82、12和45)是否小于23。 如果是这样,我需要删除那一行

对于本例,结果将是:

21 100 34 82
88 10 15 45
如何使用shell脚本实现这一点?提前谢谢

您可以使用awk:

awk '$4 >= 23 {print}' file
可以缩短为(感谢@RomanPerekhrest):

如果要就地写入文件,可以使用临时文件:

awk '$4 >= 23' file > tmp && mv tmp file
如果您有
gawk
4.1.0或更高版本,您可以使用
-i
标志在位编辑文件:

或者使用Bash循环:

while read -r a b c d; do
  [[ $d -ge 23 ]] && echo $a $b $c $d
done < file
读取时-r a b c d;做
[$d-通用电气23]&&echo$a$b$c$d
完成<文件
您可以使用awk:

awk '$4 >= 23 {print}' file
可以缩短为(感谢@RomanPerekhrest):

如果要就地写入文件,可以使用临时文件:

awk '$4 >= 23' file > tmp && mv tmp file
如果您有
gawk
4.1.0或更高版本,您可以使用
-i
标志在位编辑文件:

或者使用Bash循环:

while read -r a b c d; do
  [[ $d -ge 23 ]] && echo $a $b $c $d
done < file
读取时-r a b c d;做
[$d-通用电气23]&&echo$a$b$c$d
完成<文件

如果文件的每一行包含4个单独的数字,要修改初始文件,您可以使用以下sed方法:

sed -Ei '/\<(1{,1}[0-9]|2[0-2])$/d' file.xyt

如果文件的每一行包含4个单独的数字,要修改初始文件,可以使用以下sed方法:

sed -Ei '/\<(1{,1}[0-9]|2[0-2])$/d' file.xyt

或者速记
awk'$4>=23 1'文件.txt
@DavidC.Rankin,不需要那
1
,只要
awk'$4>=23'文件
就更好了
:)
awk'$4>=23'文件代码很棒!但它只在终端中打印结果,没有更改file.xyt的内容。我试图使用
awk'$4>=23'file.xyt>file.xyt
但它所做的只是将file.xyt作为一个空文件。它有什么问题吗?对不起,我使用了
awk'$4>=23'file.xyt | tee file.xyt
,它实现了我想要的功能。非常感谢您的友好回复:)或速记
awk'$4>=23 1'file.txt
@DavidC.Rankin,不需要
1
,只要
awk'$4>=23'文件
就更好了
:)
awk'$4>=23'文件代码很棒!但它只在终端中打印结果,没有更改file.xyt的内容。我试图使用
awk'$4>=23'file.xyt>file.xyt
但它所做的只是将file.xyt作为一个空文件。它有什么问题吗?对不起,我使用了
awk'$4>=23'file.xyt | tee file.xyt
,它实现了我想要的功能。非常感谢您的友好回复:)每行中总是有4个字段吗?您应该显示您的代码。目前看来,这就像是一个“给我代码”的问题。你应该针对一个特定的问题问一个特定的问题。因为Stack Overflow向您隐藏了最接近的原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题与Stack Overflow无关,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。”每行中总是有4个字段吗?你应该显示你的代码。目前看来,这就像是一个“给我代码”的问题。你应该针对一个特定的问题问一个特定的问题。因为Stack Overflow向您隐藏了最接近的原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题与Stack Overflow无关,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。”