AWK

2016-09-11 9 views
0
私は AWKコードの下の行を使用しています

の内側(ランダムな文字列を生成する)コマンドを実行し、100と400AWK

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = int(rand() * 300 + 100) } 1' ./OldFile.txt > ./NewFile.txt 

この間のランダムな整数で私のカンマで区切られたファイル内の7833のすべての出現箇所を置き換えます完璧に動作しますが、7833を以下のコマンドのランダムな文字列に置き換えます。

cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10 

私は以下のコマンドを使ってみましたが、動作しません。

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = `cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10` } 1' ./OldFile.txt > ./NewFile.txt 

助けてください。

ありがとうございます。

答えて

0

AWKのmanページから:

system(cmd) 
executes cmd and returns its exit status 

GNU AWKのマニュアルも一部では、システムの機能を説明し、例を提供し、セクションがあります。

system("date | mail -s 'awk run done' root") 

今、あなたが使用する必要があります

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = system("cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10") } 1' ./OldFile.txt > ./NewFile.txt 
+0

回答ありがとうございますが、残念ながらこれは動作しません。 'tr:write error:壊れたパイプ'というエラーが出ます。また、私は別のコマンドを試しましたが、 'system'は終了ステータスを返すので、数字を0(ステータス)で置換し、ランダムな文字列を新しい行に置き換えています。これは近いですが、私は必要なのはコマンドを実行してその出力(終了ステータスではない)を返すものだと思います。 –