Bur*_*135 31 bash awk numbers range
我是BASH的新手,我正在尝试使用awk根据文本文件的第4列过滤掉第1列数据.如果第4列数据与x的范围匹配,那么它将输出第1列数据."x"被认为是1-10(1,2,3..10)的数字范围.
awk -F: '{ if($4=="x") print $1}' filename.txt
filename.txt
sample1 0 0 4
sample2 0 0 10
sample3 0 0 15
sample4 0 0 20
Run Code Online (Sandbox Code Playgroud)
实际使用:
awk -F: '{ if($4=="1-10") print $1}' sample.txt
output = sample1, sample2, sample3, sample4
Run Code Online (Sandbox Code Playgroud)
应该是:sample1 sample2只有.
语法中是否有错误,我没有看到,或者我可能使用这种语法完全错误?
Kam*_*bus 64
awk '{ if ($4 >= 1 && $4 <= 10) print $1 }' sample.txt
Run Code Online (Sandbox Code Playgroud)
oli*_*bre 14
awk '$4 ~ /^[1-9]$|^10$/{print $1}' sample.txt
Run Code Online (Sandbox Code Playgroud)
输出:
sample1
sample2
Run Code Online (Sandbox Code Playgroud)
说明:
^[1-9]$ - > $ 4必须是从1到9的单个数字| (管道) - >或^10$ - > $ 4必须是数字10可能有一种方法可以只使用 awk 来做到这一点(没关系,请参阅下面我的编辑),但我不知道。我将它与 grep 结合起来:
egrep ' ([1-9]|10)$' sample.txt | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
我认为您将第四列与字符串“1-10”而不是范围进行匹配。另外,-F:会将分隔符更改为冒号而不是空格。
编辑:
awk '$4 ~ /^([1-9]|10)$/ {print $1}' sample.txt
Run Code Online (Sandbox Code Playgroud)