次の2種類のコンテンツを含むファイルがあります。
QJKLJFLHLKJDGFIUD 03:12:23
JHKJFDGDSFGDFGHDF 03:15:45
HJIK
ASDSdSADSADSSADSA 03:30:34
DFDF
KWQA
2つのバイナリファイルがあります。 1つはローカルコンピュータにあり、もう1つはリモートコンピュータにあります。
行にタイムスタンプが含まれている場合は、ローカルバイナリを呼び出して行をバイナリにパラメータとして渡す必要があります。
行にタイムスタンプが含まれていない場合は、リモートバイナリを呼び出して、その行をバイナリにパラメータとして渡す必要があります。
この目標をどのように達成できますか?
答え1
1つまたは2つのフィールドしか存在できず、両方のフィールドを含むすべての行にタイムスタンプが含まれていると仮定すると、次のことができますbash
。
while read string date; do
## If there are two fields, $string and $date, launch remote command
if [[ $date ]] ;
then ssh user@remote kimera "$string $date";
## If there is only one field, no date, launch the local command
else kimera $string; fi;
done < file
フィールドの数が異なる場合があり、実際にNN:NN:NNの形式のタイムスタンプを確認する必要がある場合は、代わりに次のコマンドを使用してください。
perl -ne 'chomp;
if(/\d+:\d+:/){system("ssh user@remote kimera $_" )}
else{system("kimera $_" )}
' file
答え2
awk 'NF==2 {system("/bin/echo " $0); next;}
{system("/bin/echo " $0 " | rev"); next;}' inputfile
編集1:
awk 'NF==2 {system("ssh user@remote kimera " $0); next;}
{system("kimera " $0); next;}' inputfile
kimera
パラメータが必要な場合は... kimera \" $0 "\""
それを変更する必要があります。