【问题标题】:Unix: One line bash command to merge 3 files together. extracting only the first line of eachUnix:一行 bash 命令将 3 个文件合并在一起。仅提取每个的第一行
【发布时间】:2013-03-09 21:40:00
【问题描述】:

我有时间在这里使用我的语法: 我有 3 个包含各种内容的文件 file1 file2 file3 (100+ 行)。我正在尝试将它们合并在一起,但只应合并每个文件的第一行。关键是使用一行 bash 代码来做到这一点: sed -n 1p file1 file2 file3 只返回 file1 的第一行

【问题讨论】:

  • 如果使用 Gnu sed 就差不多了; sed -ns '1p' file{1,2,3}

标签: bash file sed merge


【解决方案1】:

您可以通过使用read 内置命令来避免调用外部进程:

for f in file1 file2 file3; do read l < $f; echo "$l"; done > merged.txt

【讨论】:

    【解决方案2】:

    我建议您使用head,正如themel 的回答所解释的那样。但是,如果您坚持使用sed,则不能简单地将所有文件传递给它,因为它们是隐式连接的,并且您会丢失有关每个文件中第一行内容的信息。所以,如果你真的想在 sed 中做,你需要 bash 来帮助你:

    for f in file1 file2 file3; do sed -n 1p "$f"; done
    

    【讨论】:

    • 酷谢谢。你们真棒
    【解决方案3】:

    不清楚合并是指连接还是加入?

    awk 中加入(并排打印文件中的每一行)

    $ awk 'FNR==1{printf "%s ",$0}'  file1 file2 file3
    1 2 3
    

    awk 中通过连接(文件中的第一行一个接一个地打印)

    $ awk 'FNR==1'  file1 file2 file3
    1
    2
    3
    

    【讨论】:

    • 酷谢谢。你们真棒
    • @user2180912 你应该接受哪个答案对你最有帮助。您可以通过单击答案旁边的勾号来做到这一点。
    • sudo_O awk 行中的 FNR 部分代表什么?
    • FNRawk 变量,用于存储当前文件中的当前记录号(默认记录为行)
    【解决方案4】:

    你可能想试试 head -n1 -q file1 file2 file3.

    【讨论】:

    • 虽然这是最好的方法,但我认为 OP 专门要求 sed
    • @bitmask:这不是我阅读问题的方式。我认为 OP 是在询问如何“使用一行 bash 代码来做到这一点”,sed 只是一个例子。我可能错了。
    • 酷谢谢。你们真棒
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 2017-06-03
    • 2015-09-08
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多