最初の行に特定の文字列の組み合わせを含むファイルを繰り返し検索します。

最初の行に特定の文字列の組み合わせを含むファイルを繰り返し検索します。

最初の行に「StockID」と「SellPrice」という文字列を含むすべてのファイルを見つける必要があります。

以下はいくつかのファイル例です。

1.csv:

StockID Dept    Cat2    Cat4    Cat5    Cat6    Cat1    Cat3    Title   Notes   Active  Weight  Sizestr Colorstr    Quantity    Newprice    StockCode   DateAdded   SellPrice   PhotoQuant  PhotoStatus Description stockcontrl Agerestricted
<blank> 1   0   0   0   0   22  0   RAF Air Crew Oxygen Connector   50801   1   150 <blank> <blank> 0   0   50866   2018-09-11 05:54:03 65  5   1   <br />\r\nA wartime RAF aircrew oxygen hose connector.<br />\r\n<br />\r\nAir Ministry stamped with Ref. No. 6D/482, Mk IVA.<br />\r\n<br />\r\nBrass spring loaded top bayonet fitting for the 'walk around' oxygen bottle extension hose (see last photo).<br />\r\n<br />\r\nIn a good condition.    2   0
<blank> 1   0   0   0   0   15  0   WW2 US Airforce Type Handheld Microphone    50619   1   300 <blank> <blank> 1   0   50691   2017-12-06 09:02:11 20  9   1   <br />\r\nWW2 US Airforce Handheld Microphone type NAF 213264-6 and sprung mounting Bracket No. 213264-2.<br />\r\n<br />\r\nType RS 38-A.<br />\r\n<br />\r\nMade by Telephonics Corp.<br />\r\n<br />\r\nIn a un-issued condition.    3   0
<blank> 1   0   0   0   0   22  0   RAF Seat Type Parachute Harness <blank> 1   4500    <blank> <blank> 1   0   50367   2016-11-04 12:02:26 155 8   1   <br />\r\nPost War RAF Pilot Seat Type Parachute Harness.<br />\r\n<br />\r\nThis Irvin manufactured harness is 'new old' stock and is unissued.<br />\r\n<br />\r\nThe label states Irvin Harness type C, Mk10, date 1976.<br />\r\nIt has Irvin marked buckles and complete harness straps all in 'mint' condition.<br />\r\n<br />\r\nFully working Irvin Quick Release Box and a canopy release Irvin  'D-Ring' Handle.<br />\r\n<br />\r\nThis harness is the same style type as the WW2 pattern seat type, and with some work could be made to look like one.<br />\r\n<br />\r\nIdeal for the re-enactor or collector (Not sold for parachuting).<br />\r\n<br />\r\nTotal weight of 4500 gms.   3   0

2.csv:

id  user_id organization_id hash    name    email   date    first_name  hear_about
1   2   15  <blank> Fairley [email protected] 1129889679  John    0

最初の行に「StockID」と「SellPrice」を含むファイルだけを探したいです。したがって、この例では ./1.csv だけを出力しようとします。

私はこれをすることができましたが、今は詰まっています;(

where=$(find "./backup -type f)
for x in $where; do
   head -1 $x | grep -w "StockID"
done

ベストアンサー1

find+awk解決策:

find ./backup -type f -exec \
awk 'NR == 1{ if (/StockID.*SellPrice/) print FILENAME; exit }' {} \;

キーワードの順序が異なる場合は、パターンを/StockID.*SellPrice/で置き換えます/StockID/ && /SellPrice/


ファイルの数が多い場合、より効率的な選択肢は次のとおりです(一度に複数のファイルを処理します。コマンドへの呼び出しの総数は一致するファイルの数よりはるかに少なくなります)。

find ./backup -type f -exec \
awk 'FNR == 1 && /StockID.*SellPrice/{ print FILENAME }{ nextfile }' {} +

おすすめ記事