2017-03-08 114 views
0

我堅持我認爲比較簡單的問題。我有一部分代碼是這樣的:將參數傳遞給bash腳本中的循環

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

這個想法是這樣的。在系統上有用戶名爲user_name。在他的主文件夾中,他有一種類型的文件,比如xxx.txtyyy.txt。在這些文件裏面有我想要第二列的數據(這就是awk的用處)。我該如何運行這個循環,以便檢查目錄中的所有文件?如果我添加如awk 'NR==1{print $2}' $f這樣的東西,它只檢查一個文件,然後用錯誤報告。

+1

您正在使用'ls -l'(小寫字母'l',不是數字' 1')...並且即使這樣你也應該避免嘗試使用[輸出來自ls](http://mywiki.wooledge.org/ParsingLs)...嘗試'for/in/home/user_name/* .txt'然後'awk'NR == 1 {print $ 2}'「$ f」' – Sundeep

+1

或者更簡單,取而代之的for-loop,只是一個簡單的'awk'FNR == 1 {print $ 2}'/ home/user_name/*。txt' – Sundeep

回答

1

直接使用文件條目awk和使用FNR(文件NR)代替NR,對於所有文件(僅適用於第一,非空,文件,NR == 1)

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

算可能失敗,如果你有太多的文件通過命令傳遞(需要另一種方法,如find ... -exec)