[英]how to extract columns from a text file with bash
我有一個這樣的文本文件。
res ABS sum
SER A 1 161.15 138.3
CYS A 2 66.65 49.6
PRO A 3 21.48 15.8
ALA A 4 77.68 72.0
ILE A 5 15.70 9.0
HIS A 6 10.88 5.9
我想根據最后一列(總和)的值提取第一列(res)的名稱。 如果總和 > 25 和總和 < 25,我必須打印重命名。 我怎樣才能得到這樣的輸出?
雖然您可以使用bash
的while read
循環執行此操作,但使用awk
更容易,而且很可能更快
awk '$5 != 25 { print $1 }'
請注意, print resnames if sum >25 and sum<25
與print if sum != 25
相同,則您的邏輯print resnames if sum >25 and sum<25
。
這應該這樣做:
awk 'BEGIN{FS=OFS=" "}{if($5 != 25) print $1}' bla.txt
while read line
do
v=($line)
sum=${v[4]}
((${sum/.*/} >= 25)) && echo ${v[0]}
done < file
您需要跳過第一行。
由於 bash 不處理浮點值,這將打印 25,它不完全大於 25。
這可以通過調用 bc 進行算術來處理。
tail -n +2 ser.dat | while read line
do
v=($line)
sum=${v[4]}
gt=$(echo "$sum > 25" | bc) && echo ${v[0]}
done
好的舊剪裁怎么樣? :)
說你想要第二列,
cat your_file.txt | sed 's, +, ,g' | cut -d" " -f 2
sed 在這個命令中做什么? cut 期望列由固定長度的字符或字符串分隔(請參閱文檔)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.