1

私はこれを持っています: ./awktest -v fields=`cat testfile`

フィールド変数を「1 2 3 4 5」に設定する必要があります。これは、テストファイルに含まれるすべてです

gawk: ./awktest:9: fatal: ファイル `2' を読み取り用に開けません (そのようなファイルやディレクトリはありません)

私がこれを行うと、うまくいきます。./awktest -v fields='1 2 3 4 5'

エラー発生時の印刷フィールド: 1 2 番目のインスタンスの印刷フィールド: 1 2 3 4 5

1 2 3 4 5 の代わりに 12345 で試してみると、どちらでも問題なく動作するため、空白に問題があります。この問題は何ですか?そして、どうすれば修正できますか。

4

2 に答える 2

1

これはおそらくawk質問ではありません。ほとんどの場合、原因はシェルです。

たとえば、awktest が次の場合:

#!/bin/bash
i=1
for arg in "$@"; do
  printf "%d\t%s\n" $i "$arg"   
  ((i++))
done

次に、次のようになります。

$ ./awktest -v fields=`cat testfile`
1   -v
2   fields=1
3   2
4   3
5   4
6   5

ファイルの内容が 1 つの単語として処理されていないことがわかります。

簡単な解決策: コマンド ラインで二重引用符を使用します。

$ ./awktest -v fields="$(< testfile)"
1   -v
2   fields=1 2 3 4 5

コンストラクトは、外部プロセスを生成する必要のない$(< file)bash ショートカットです。`cat file`

または、awk BEGIN ブロック内のファイルの最初の行を読み取ります

awk '
    BEGIN {getline fields < "testfile"} 
    rest of awk program ...
'
于 2013-02-27T23:11:37.200 に答える
0
./awktest -v fields="`cat testfile`"

#note that:
#./awktest -v fields='`cat testfile`'
#does not work
于 2013-02-27T22:58:27.303 に答える