跳过模式匹配的行并删除条件匹配的行

跳过模式匹配的行并删除条件匹配的行

我有以下格式的文件:

Q
L
A D
1 10
2 21
3 22
4 5
5 9

我需要跳过以“Q”或“L”开头的行,并删除第二列值大于 10 的行,并将整个内容保存在新文件中。输出文件示例:

Output file 1
    Q
    L
    A D
    1 10
    4 5
    5 9 

Output file 2
1
4
5

代码 :

while read -r line; if [[ $line == "A" ]] ||[[ $line == "Q" ]]||[[ $line == "L" ]] ; then 
awk '$2 < "11" { print $0 }' test.txt
awk '$2 < "11" { print $1 }' test1.txt
done < input.file

答案1

你可以使用一个简单的正则表达式过滤以字母 A 或 L 或 Q 加上条件开头的行。awk非常适合这样的事情:

awk '($0 ~ /^[AQL]/ || $2 < 11) { print $0 }' < input.file > output.file1
awk '($0 ~ /^[^AQL]/ && $2 < 11) { print $1 }' < input.file > output.file2

答案2

使用以下命令进行测试,效果很好

命令

awk '$1 !~ "Q|L" && $2 <11{print $1}' filename

输出

awk '$1 !~ "Q|L" && $2 <11{print $1}' filename
1
4
5

相关内容