Linux

按行值過濾文件

  • January 18, 2022

我需要選擇第一列中包含某個字元並且第一列中的數字大於特定值的行。

具體來說,我需要選擇第一列中包含“G”且位數大於50的行,如下所示:

輸入文件:

764M    qa11279_TPK0002730_50901083/
762M    qa10589_TPK0002730_50796634/
11G     qa17805_TPK0001664_51330191/
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

輸出文件:

56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

一個awk解決方案:

$ awk -F' ' '$1 ~ /^[0-9]*G/ { sub(/G/, "", $1); if(+$1 > 50) print }' file 
56 qa15384_TPK0001664_51232746/
140 qa29996_TPK0000949_51951816/

由於“G”僅出現在第一列中,如您的範例輸入所示:

$ awk '/G/ && ($1+0 > 50)' file
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

但如果它可能發生在其他領域:

$ awk '($1 ~ /G/) && ($1+0 > 50)' file
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

引用自:https://unix.stackexchange.com/questions/686822