簡體   English   中英

Bash腳本FS使用

[英]Bash scripting FS use

我有一個查找和打印文件名的命令,但是在理解“ FS = / <(find)”部分時遇到了問題。 完整的命令是:

awk 'NR==FNR{a[$2];next}$NF in a' FS=, data.txt FS=/ <(find)

輸出為:

  user>./test.sh data.txt
./test1/file1 ./test2/file2 ./test3/file3
./test1/file1 ./test2/file2 ./test3/file3
./test1/file1 ./test2/file2 ./test3/file3

為什么每個文件輸出3次? 我只想一次,因為只有file1 file2 file3。 並且data.txt的內容是:

user>cat data.txt
dir1,file2,2018/07/04,2009/10/12 10:45,john
dir3,file1,2018/07/04,2005/08/07 13:57,john
dir3,file3,2018/07/04,2006/10/14 09:56,john

我無法重現該問題。

我創建了一個目錄,其中包含3個子目錄(test1,test2,test3)和3個文件(./test1/file1 ./test2/file2 ./test3/file3)+ data.txt文件

find收益:

user> find
.
./test2
./test2/file2
./test1
./test1/file1
./test3
./test3/file3
./data.txt

我將嘗試解釋awk命令:

awk 'NR==FNR{a[$2];next}$NF in a' FS=, data.txt FS=/ <(find)

awk正在從文件data.txt中讀取並find輸出,使用,作為data.txt的分隔符和/分隔符來find輸出。

awk命令等效於:

awk 'NR==FNR{a[$2] = 1}NR!=FNR{if($NF in a){print $0}}' FS=, data.txt FS=/ <(find)

意思是 :

for rows in data.txt:
    store second column in array
for file (or dir) in current_directory:
    if name of file in array:
        print path of file

在我的系統上,此命令返回我期望的結果:

./test2/file2
./test1/file1
./test3/file3

您可以在問題中添加find命令的確切輸出嗎? 我假設該命令未以您系統上的正確格式返回文件(每個文件或目錄1行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM