2015-09-17 77 views
0

我正在搜索包含以特定模式開頭的記錄的文件,但現在遇到了包含文件內該位置的多個值的文件(壞數據)問題不應該是這種情況(它應該匹配文件中的每個記錄,但有時不匹配)。下面是當前的代碼:僅在第一行文件中搜索特定開始模式

echo "Parsing out list of warehouses contained in file set." 

(cd $DATA && grep -l '^   80' *) >$TEMP/$program.list.whse80.$$ 

(cd $DATA && grep -l '^   61' *) >$TEMP/$program.list.whse61.$$ 
(cd $DATA && grep -l '^   68' *) >>$TEMP/$program.list.whse61.$$ 
(cd $DATA && grep -l '^   69' *) >>$TEMP/$program.list.whse61.$$ 

(cd $DATA && grep -l '^   01' *) >$TEMP/$program.list.whse01.$$ 

.etc ...

正在發生的事情是,當存在包含與有61模式(與前9位)開始記錄,記錄和01文件模式,在61文件和01文件中捕獲相同的文件名。我想強制僅以這種方式對每個文件的第一行進行掃描,因爲我有其他邏輯可以在後面的程序中捕獲混合文件。

非常感謝您的任何幫助。

+0

您是想從第一行開始grep還是想要第一行匹配? –

+0

我只想grep每個文件的第一行。 – Kiley

回答

0

使用頭,以限制只能頂部n行,例如

head -3 file | grep ... 

爲通配符,你可以在做文件循環

for f in *; do if [ -f "$f" ]; then head -1 "$f" | grep ...; fi; done 

如果要輸出的文件名,這由於head只是提取第一行,因此解決方案無法工作。但是,您可以檢查grep狀態並自行報告文件名。

if grep -q pattern; then echo $f fi 

另外,您可以使用AWK,而不是grep的

for f in *; do if [ -f "$f" ]; then awk 'NR==1 && /pattern/{print FILENAME}' "$f"; fi; done 

使用圖案代替模式。

+0

那種作品。當我運行這個: – Kiley

+0

爲f in *;如果[-f $ f];然後頭-1 $ f | grep'^ 61';網絡連接;完成 – Kiley

+0

我得到正確的命中,但它實際上給我第一個像自己,我想要的文件名。當我使用「grep -l」時,它會爆炸。 – Kiley

相關問題