ファイル内のすべてのファイルの最初の20行を表示する方法

ファイル内のすべてのファイルの最初の20行を表示する方法

私はこれを使って ".txt"ファイルのすべての名前を1つのファイルに入れます。

find . -name "*.txt" | sort > txtfile

txtfileにリストされているすべてのファイルの最初の20行をすべて表示する方法(または20行未満の場合は空白行を提供)は何ですか?

答え1

ファイル名はファイル内の改行で区切られているため、txtfile各ファイルを読み取り、行数が同じか(または20より大きいか)を確認し、その場合は最初の20行を印刷し、そうでない場合は残りの行の改行を印刷できます。 :

while IFS= read -r f; do 
    lines=$(wc -l <"$f")
    if (( lines < 20 )); then
        cat -- "$f" 
        for ((i=20; i>lines; i--)); do 
            echo
        done
    else 
        head -20 -- "$f"
    fi
done <txtfile

答え2

awkこれをサポートするルールがある場合は、ENDFILE次のことができます。

xargs -a txtfile awk 'FNR <= 20 {print} ENDFILE {for (n=FNR+1;n<=20;n++) print ""}'

各ファイルにヘッダーがあることが気に入らない場合は、pr「ページ」を使用して各ファイルの最初の20行を印刷できます。

xargs -a txtfile pr +1:1 -l25

(残念ながらprヘッダーを抑制するオプションがありますが、そのオプションはページ付けも抑制します)。もしあなたならするヘッダーに注意を払うと、ファイルを個別に処理してtail次のように削除できます。

while read -r f; do 
  pr +1:1 -l25 "$f" | tail -n +6
done < txtfile

または(GNU sedの「nskipm」アドレス指定を使用)

xargs -a txtfile pr +1:1 -l25 | sed '1~25,+4d'

関連情報