簡體   English   中英

僅在文件的第一行中搜索特定的開始模式

[英]Searching for specific beginning pattern in first lines of files only

我正在搜索包含以特定模式開頭的記錄的文件,但現在遇到文件(錯誤數據)問題,該文件在文件中的該位置包含多個值,這種情況永遠不會發生(它應該與文件中的每個記錄匹配)但有時沒有)。 下面是當前代碼:

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.$$

。等等...

發生的情況是,當一個文件包含以61模式(前9個空格)和01模式開頭的記錄記錄時,在61文件和01文件中捕獲了相同的文件名。 我想只以這種方式強制grep每個文件的第一行,因為我還有其他邏輯可以稍后在程序中捕獲混合文件。

在此先感謝您的協助。

例如,使用head僅限制到前n行

head -3 file | grep ...

遍歷文件,您可以在for循環中執行

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 

用您的圖案替換圖案。

暫無
暫無

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

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