回覆列表
  • 1 # FungLeo

    ls 得到檔案列表。然後迴圈讀取檔案。用head擷取第零行到指定行之間的文字。最後用tail讀取最後一行。

    程式碼如下:

    #!/bin/bash

    files=$(ls)

    for i in $files; do

    head -n20 $i | tail -n1

    done

    如果希望將結果輸出到某個檔案的話,還可以這樣改

    #!/bin/bash

    files=$(ls)

    for i in $files; do

    res=$(head -n20 $i | tail -n1)

    echo $res > res.txt

    done

    然後就會把所有的結果都儲存在 res.txt 檔案中了。

  • 2 # 產品經理老胡

    想要在Linux中批次提取一批檔案中的某一行資料,我的思路是把問題分解:

    遍歷這批檔案

    提取某一行資料(根據模式匹配或者固定行號)

    將資料輸出到某處

    可以採用shell程式設計的方式來完成這個任務:

    批次檔案遍歷

    批次檔案遍歷有兩個辦法實現,如果知道檔案的列表,就可以按照檔案的列表來遍歷,例如:

    其中file001、file002、file003是你這一批檔案的路徑+檔名。

    如果這些檔案都放在了一個目錄foo下面,也可以寫成這個樣子:

    從檔案中提取某一行資料

    根據關鍵詞匹配提取

    比如當且僅當關鍵詞“bar”在這批檔案中的每一個檔案僅出現一次,我們就可以根據這個關鍵詞定位它所在的行,並輸出這一行:

    grep "bar" filename

    寫到迴圈中就是:

    根據行號匹配提取

    使用sed命令可以根據固定的行號提取檔案中該行的內容,比如固定提取每個檔案的第30行:

    sed -n "30p" filename

    寫到迴圈中就是:

    將資料輸出到某處

    最後將查詢的內容使用重定向“>>”輸出到文字檔案中。完整的指令碼大約是這樣的:

    總結一下,類似稍微複雜的檔案操作首先想到的是將問題分解,針對每個小問題找出解決的方案。另外此例中如果檔案都在一個目錄內的情況下,並且採用的是關鍵詞匹配提取,則可以直接使用grep語句一次性搞定:

    grep “key_word” /foo/*

    這樣做的缺點是輸出的資訊帶有檔名,需要進一步處理,這裡就不詳解了。

  • 中秋節和大豐收的關聯?
  • 5 2016年新出的電影,內容是男女主角互換身體?