【问题标题】:Merge specific files in a list of files in Linux [duplicate]在Linux中的文件列表中合并特定文件[重复]
【发布时间】:2020-04-16 02:00:17
【问题描述】:

我有一个文件列表如下:

a1.txt
a2.txt
b1.txt
b2.txt
c1.txt
c2.txt
...
z1.txt
z2.txt

我想知道如何编写命令来合并前两个文件 a1.txt + a2.txt 并输出为 a.zip,类似地,b1.txt + b2.txt 输出 b.zip、c1.txt + c2 .txt 输出 c.zip 等。

感谢您的帮助!

【问题讨论】:

  • Looping through alphabets in Bash: for x in {a..z}; do ... done 的可能重复。
  • 尝试编写一个循环,一次读取一行并只输出一个文件。如果你可以让它工作,尝试修改它以一次读取两行。

标签: linux


【解决方案1】:

试试这个:

for i in {a..z}; do cat "$i"1.txt > $i.txt; cat "$i"2.txt >> $i.txt; done

【讨论】:

    【解决方案2】:

    如果您不想合并文件内容,如果它们的名称以相同的字母开头,则只需将它们放入同一个 zip 文件中,您可以运行

    for c in {a..z}; do zip "$c".zip "$c"*.txt; done
    

    如果你想先合并你的a文件、b文件等,然后压缩合并的版本,你可以运行

    for c in {a..z}; do cat "$c"1.txt "$c"2.txt > "$c".txt ;zip "$c".zip "$c".txt; done
    

    请注意,如果您只需要一个子集,例如,这将为从 a 到 z 的 所有 个字母创建 zips。 a-f,您只能遍历 {a..f}。

    【讨论】:

    • 您好,感谢您的帮助。实际上,我的文件列表不是 a.txt、b.txt...z.txt 的形式,我只是想简化它。如果文件名如下:abc1.txt、abc2.txt、ijk1.txt、ijk2.txt 等,我该如何处理。谢谢
    • 如果你想连接 abc1.txt 和 abc2.txt 等的内容,你可以像这样遍历所有前缀模式,例如:for file in `ls *1.txt`; do pref=`echo $file | cut -d'1' -f1`; file2="${pref}2.txt"; cat "$file" "$file2" > "${pref}.txt"; done 只需将cat "$file" "$file2" > "${pref}.txt" 替换为你真正想对你的文件做什么。
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多