Bash 如何选择少于n行的文件?

Bash 如何选择少于n行的文件?,bash,awk,sed,merge,grep,Bash,Awk,Sed,Merge,Grep,给定一个文件夹,其中包含n个不同行数的文件: $wc-l*| sort-n-r按行数列出并排序文件 >总计99860 50000 mr.txt 4976स.文本 4462प.文本 3745म.文本 3545क.文本 3195व.文本 2201न.文本 2183ब.文本 2134अ.文本 1789र.文本 1666द.文本 1623आ.文本 1568ग.文本 1524ज.文本 1507त.文本 1376श.文本 1132ल.文本 1102ह.文本 1089च.文本 1076उ.文本 1025भ.文

给定一个文件夹,其中包含n个不同行数的文件:

$wc-l*| sort-n-r按行数列出并排序文件 >总计99860 50000 mr.txt 4976स.文本 4462प.文本 3745म.文本 3545क.文本 3195व.文本 2201न.文本 2183ब.文本 2134अ.文本 1789र.文本 1666द.文本 1623आ.文本 1568ग.文本 1524ज.文本 1507त.文本 1376श.文本 1132ल.文本 1102ह.文本 1089च.文本 1076उ.文本 1025भ.文本 809य.文本 791फ.文本 766ख.文本 652ट.文本 645घ.文本 480ए.文本 456इ.文本 446ध.文本 420ड.文本 318ठ.文本 273झ.文本 182थ.文本 163ओ.文本 118छ.文本 115ऑ.文本 64ऐ.文本 55ढ.文本 44औ.文本 29२.文本 26ई.文本 20ष.文本 20ऊ.文本 20१.文本 14ऋ.文本 6.ऱ.文本 4.३.文本 2.९.文本 2.८.文本 1.ॐ.文本 1.४.文本 如何选择少于200行的文件


因此,我可以通过>>output.txt将这些文件提供给最终文件。

假设您的文件名没有空格和诸如“\”之类的特殊符号,请使用

因为*按排序顺序展开,所以级联是基本实现。

纯bash中的一个实现,不使用任何外部命令行实用程序。这将适用于任何文件名,包括包含换行符的文件名,并且如果输出文件本身已经存在,还可以防止其被合并:

#!/bin/bash

outfile='merged_output.txt'
cutoff=200
for file in *; do
    [[ $file = "$outfile" || ! -f $file ]] && continue
    mapfile -n "$cutoff" lines < "$file"
    (( ${#lines[@]} < cutoff )) && printf '%s' "${lines[@]}"
done >> "$outfile"

在每个Unix设备上的任何shell中使用任何awk:

awk '
    FNR == 1 { printf "%s", buf; buf="" }
    { buf = buf $0 ORS }
    FNR >= 200 { buf=""; nextfile }
' *

支持nextfile作为命令的awk将比不支持nextfile的awk运行得更快,后者会认为它是一个未设置的变量而忽略它。

在文件中循环。使用wc-l<$filename获取长度。如果小于200,请将其附加到输出文件:cat$filename>>output.txt这其中的哪一部分给您带来了麻烦?关于问题焦点、结束投票和问题改进的说明:询问我是否想要非默认行为的注释已被作者删除。为了清楚起见,我的对应答案,我想要的字母顺序,即默认顺序,已经被删除。为清晰起见,已删除由simple>>output.txt完成的合并字。问题的范围已经缩小到了最低限度:根据要求按行数进行区分。尽管如此,你仍然需要表现出一些主动性,并尝试自己解决问题,当你看到输入和问题的清晰格式时,你可以肯定我搜索并尝试了一个小时。我觉得我错过了一个我不知道的小命令。索科维对awk的了解和回答表明,一艘班轮就可以做到这一点。我很感谢那些帮助过我的人。效果很好,很容易理解,谢谢。为了好玩,这将有助于马拉地社区在维基媒体上记录数千个单词,因此维基词典可以提供这种语言的音频。谢谢:谢谢您的代码,它将帮助社区和未来的读者:
awk '
    FNR == 1 { printf "%s", buf; buf="" }
    { buf = buf $0 ORS }
    FNR >= 200 { buf=""; nextfile }
' *