2017-07-05 7 views
1

私はGZ形式で複数のファイルを持っているし、各ファイルの行の1/4を各ファイルの行をカウントし、印刷物、このスクリプトを使用:awkをタブ区切りのファイルに出力して、毎回2行を1行にマージする方法は?

for file in *.gz; 
do echo $file; 
gunzip -c $file | wc -l | awk '{print, $1/4}'; 
done 

はSTDOUT:

AB.gz 
12 
CD.gz 
4 

どのようにパイプすることができますこの合流する2本の線のようなタブ区切りファイルへのawkの出力をそれぞれ時間:

AB.gz 12 
CD.gz 4 

私はスクリプトで| paste -sd '\t' > output.txt配管によりペーストをしようとしたが、それうまくいかなかった。

答えて

1

あなたは、このようなスクリプトを使用することができます:

for file in *.gz; do 
    gzcat "$file" | awk -v fn="$file" -v OFS='\t' 'END{print fn, int(NR/4)}' 
done 
+0

感謝。スクリプト内のファイルにstdoutを書き込む方法は?例:> output.txtが機能しない.. – Ramon

+0

'done'を' done> output.txt'に変更するだけです – anubhava

1

ファイルの後に改行をエコーし​​ないでください:

for file in *.gz; 
do 
    printf "%s " "${file}" 
    gunzip -c $file | wc -l | awk '{print, $1/4}'; 
done 
関連する問題