当我尝试使用以下代码获取 2 个输出文件(即 input1、input2)时,遇到语法错误,如下所述。
test.txt
Q
L
A D
1 10
2 21
3 22
4 5
5 9
while read -r line; if [[ $line == "A" ]] ||[[ $line == "Q" ]]||[[ $line == "L" ]] ; then awk '$2 < "11" { print $0 }' input1.txt; awk '$2 < "11" { print $1 }' input2.txt; done > test.txt
input1.txt
Q
L
A D
1 10
4 5
5 9
input2.txt
1
4
5
答案1
根据@steeldriver 的更正再加上一项仅有的对于语法,而不是功能
while read -r line; do #missing `do`
if [[ $line == "A" ]] ||[[ $line == "Q" ]]||[[ $line == "L" ]] ; then
awk '$2 < "11" { print $0 }' input1.txt
fi # the missing fi
awk '$2 < "11" { print $1 }' input2.txt
done < test.txt # correct the redirection
从你的帖子来看,你想要的似乎可以实现
awk ' NF > 1 && ($2*1) < 11 && ($2*1) > 0 {print $1} ' test.txt
和
awk ' $1 ~ /^[QLA]/ || ( ($2+0) < 11 && ($2+0) >0 ) {print $0} ' test.txt
您需要注意,awk
当 $2 包含字母字符时,对 $2 进行算术检查将解析为0