2017-03-08 13 views
0

私は比較的単純な問題だと思っています。私はこのようなコードの一部を持っています:bashスクリプトで引数をループに渡す

#!/bin/bash 
file=$(ls -l /home/user_name/) 
for f in ${file}; do 
    awk 'NR==1{print $2}' 
done 

アイデアはこうです。システムには、ユーザ名user_nameがあります。彼のホームフォルダの中には、1種類のファイルがあります。xxx.txtyyy.txtとしましょう。これらのファイルの中には、2番目の列を取りたいデータがあります(これはawkが使用されているものです)。このループを実行すると、ディレクトリ内のすべてのファイルがチェックされます。このようなファイルを追加すると、1つのファイルしかチェックされず、残りの部分はエラーが発生してレポートされます。

+1

'ls -l'(小文字のアルファベット' 1')...そして、あなたは[lsからの出力](http://mywiki.wooledge.org/ParsingLs)を使うことを避けるべきです... '/ home/user_name/*。txt'で' for f 'を試してみてください'awk' NR == 1 {print $ 2} '"$ f" ' – Sundeep

+1

、あるいはより単純なものになります。 forループの、単純な 'awk 'FNR == 1 {print $ 2}'/home/user_name/*。txt' – Sundeep

答えて

1

はAWKに直接ファイルのエントリを使用して、代わりにすべてのファイル(初回のみ、非空で、ファイルのようにNR == 1)

awk 'FNR==1{print $2}' /home/user_name/*.txt 

カウントNRのFNR(ファイルNR)を使用しますこの特定のケースでは、コマンドを使って渡すファイルが多すぎる場合(find ... -execのような別の方法が必要です)、