Как судить по ключевым словам, если в awk? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть файл с информацией о работе в моем проекте с именем tmpInfo.txt.Содержимое tmpInfo.txt выглядит так:

875675 mpirun -machinefile $PBS_NODEFILE -np $NP /opt/software/vasp/vasp-intel/vasp5.4/vasp5.4.1/vasp_std>o.$PBS_JOBID.out
875676 mpirun -machinefile $PBS_NODEFILE -np $NP /opt/software/vasp/vasp-intel/vasp5.4/vasp5.4.1/vasp_std>o.$PBS_JOBID.out
875683 source /opt/software/Gaussian/g09-env.sh
875695 
875696 
875697 EXEC=/home/inspur/tensorflow_test/test.py python3 $EXEC
875698 /opt/intel/impi/5.0.2.044/intel64/bin/mpirun -machinefile $PBS_NODEFILE -n 480 /opt/software/vasp/vasp-intel/vasp5.4/vasp5.4.1/vasp_gam
875699 fluent 3d -g -t$proc -mpi=intel -ssh -cnf=conf_file -i aircraft_wing_2m.commands
875764 source /opt/software/Gaussian/g09-env.sh /opt/software/Gaussian/g09/g09 <Bush_2_b_fix1a_1_fre_ts1a3_irc_r_opt1_sccc_fix1_ts_irc_r_opt_fsc.gjf>> "Bush_2_b_fix1a_1_fre_ts1a3_irc_r_opt1_sccc_fix1_ts_irc_r_opt_fsc.log"

Теперь я хочу получить заключение по ключевым словам для каждой строки;

У меня есть tred:

awk '{if ($0=~"Gaussian") print $0" "gaussion; else if ($0=~"fluent") print $0" "fluent; else print $0" "NKOWN}' tmpInfo.txt

Но повезло, я получил информацию об ошибке:

awk: {if ($0=~"Gaussian") print $0" "gaussion; else if ($0=~"fluent") print $0" "fluent; else print "C"}
awk:         ^ syntax error
awk: {if ($0=~"Gaussian") print $0" "gaussion; else if ($0=~"fluent") print $0" "fluent; else print "C"}
awk:                                           ^ syntax error
awk: {if ($0=~"Gaussian") print $0" "gaussion; else if ($0=~"fluent") print $0" "fluent; else print "C"}
awk:                                                       ^ syntax error
awk: {if ($0=~"Gaussian") print $0" "gaussion; else if ($0=~"fluent") print $0" "fluent; else print "C"}
awk:

Кажется, нет ничего плохого, кто может мне помочь?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Вам нужно сделать 2 основных изменения в вашем коде.1-ое изменение =~ (используется в оболочке, а awk не является оболочкой) на ~/string/, тогда я считаю, что gaussion - это текст, который вы хотите напечатать в выводе, поэтому переносите его в "gaussion".и к другим текстам.

Попробуйте выполнить один раз.

awk '{if($0~/Gaussian/){print $0" gaussion"} else if($0~/fluent/){print $0" fluent"} else{print $0" UNKOWN"}}'  Input_file

Или форму решения, не относящуюся к одной строке, как указано ниже.

awk '
{
  if($0~/Gaussian/){
     print $0" gaussion"
  }
  else if($0~/fluent/){
     print $0" fluent"
  }
  else{
     print $0" UNKOWN"
  }
}'  Input_file
0 голосов
/ 06 июня 2019

Предполагая, что у вас нет строк, в которых отображаются как гауссовский, так и свободно говорящий, и вы не хотите неправильно вводить гауссовский в своих выходных данных, я бы сделал это с помощью GNU awk:

awk '{print $0, (match{$0,/Gaussian|fluent/,a) ? tolower(a[0]) : "UNKNOWN")}'  Input_file

или с любым awk:

awk '{print $0, (match{$0,/Gaussian|fluent/) ? tolower(substr($0,RSTART,RLENGTH)) : "UNKNOWN")}'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...