Shell-Script

如何優化這個oneliner?(如果第二列為空,則將該行放在另一個文件中)

  • February 24, 2014

我有一點“oneliner”:

while read ONELINE; do
 if [[ -n "`echo $ONELINE | awk '{print $2}'`" ]]; then
   echo "$ONELINE" >> LIST-ok.txt
 else
   echo "$ONELINE" >> LIST-notok.txt
 fi
done < ORIGINALLIST.txt

但它非常慢..我怎樣才能優化它來做同樣的事情但要快得多?如果第二列為空,則將給定行放在另一個文件中。

您已經標記了問題awk,因此請使用它:

awk '{if (NF>=2) {print > "LIST-ok.txt"} else {print > "LIST-notok.txt"}}' filename

另一種說法是使用三元運算符:

awk '{f=NF>=2?"LIST-ok.txt":"LIST-notok.txt"; print > f}' filename

@devnull 的 awk oneliner 的 perl 版本:

perl -alne 'print { $#F ? stdout : stderr } $_' < original >list-ok 2>list-notok

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