2017-06-27 9 views
0

基本的なUnixの質問です。Unix:別のファイルのファイル名を使用

デルタファイルのレコード数をカウントするスクリプトがあります。

cut -c2-11 < ${fileToUse} 

しかし、どのように私は、ファイル名自体としてファイルの内容を使用してください:

awk '{ 
    n++ 
    } END { 
    if(n >= 1000) print "${completeFile}"; else print "${deltaFile}"; 
    }' <${deltaFile} >${fileToUse} 

はその後、IF条件に応じて、私は適切なファイルを処理しますか?
調整が必要な場合は、無料でご利用ください。ファイル名として変数で識別自体でファイルの内容を使用するには、事前に

おかげ
乾杯
サイモン

+0

'$ {completeFile}'とは何ですか? – RomanPerekhrest

+0

'$ {completeFile}'と '$ {deltaFile}'は実際のファイルの変数名です。 アイデアは、前月のcompleteFileと今月のcompleteFileを比較するプリプロセッサを持っています。その比較の出力はdeltaFileです。 大部分は空ですが、deltaFileがcompleteFileのxx%(> = 1000ステップ)より大きい場合は、completeFileをfileToUse経由で次のプロセスに渡したいだけです。そうでなければdeltaFileはfileToUseを使用して次のプロセスに移動します – sigmazen

+0

おそらくdeltaFileは必要ありません。先月のcompleteFileと今月のcompleteFileをawkと比較してそこから行くことは意味をなさないかもしれません。簡潔でテスト可能なサンプル入力(すなわち完全なファイルバージョン)と期待される出力を含めるように質問してください。これはXY質問のような感じです。 –

答えて

1

(尋ねとして)

cut -c2-11 <"$(cat $filetouse)" 
// or in zsh just 
cut -c2-11 <"$(< $filetouse)" 

でファイル名でない限りファイルは1つ以上の改行文字で終わっていますが、それはかなり厄介で不便なのでほとんどありません:


の微調整:あなたのawkは、変数参照${completeFile}または${deltaFile}(それらが単一引用符で囲まれawkスクリプト内だから)ではない変数のいずれかの値を出力します。あなたが実際に値をしたい場合、私はあなたの説明から期待として、あなたはこの

awk -vf="$completeFile" -vd="$deltaFile" '{n++} END{if(n>=1000)print f; else print d}' <"$deltaFile"` 
# the " around $var can be omitted if the value contains no whitespace and no glob chars 
# people _often_ but not always choose filenames that satisfy this 
# and they must not contain backslash in any case 

か(彼らはすでにされていない場合)のenv VARSとしてシェルVARSをエクスポートするようにawkのVARSにシェルVARSを渡す必要がありますそしてまた、あなたがあなた自身のカウンタを必要としません

awk '{n++} END{if(n>=1000) print ENVIRON["completeFile"]; else print ENVIRON["deltaFile"]}' <"$deltaFile" 

のように、awkがすでに入力レコード

awk -vf=... -vd=... 'END{if(NR>=1000)print f;else print d}' <... 

以上簡潔

をカウントしてアクセス
awk -vf=... -vd=... 'END{print (NR>=1000?f:d)}' <... 

または名前がスクリプト

awk -vf="$completeFile" 'END{print (NR>=1000?f:FILENAME)}' "$deltaFile" # no < 

とあなたがすべてで中間ファイルを必要としない、上記のように末尾の改行を禁止するに提供されていますので、代わりにリダイレクトのファイル引数を使用して、ちょうど

cut -c2-11 <"$(awk -vf="$completeFile" -'END{print (NR>=1000?f:FILENAME)}' "$deltaFile")" 

それとも、本当にawkを必要としない、wcはカウントを行うことができますし、任意のPOSIXまたはクラシックシェルが比較に

を行うことができます
+0

幻想的な反応...デイヴが徹底的に返答する時間をとってくれてありがとう、ありがとう。キーが見つからない部分は、 '$ {fileToUse}'から '' $(cat $ fileToUse) ''になり、完全に機能しました。あなたの追加のコメントはすばらしく、私はそれらを組み込んで文全体を合理化しました。 もう一度ありがとう – sigmazen

関連する問題